Frage

I'm with a problem when updating an object in my MVC application:

This is my whole view, it has a submit button that must to update itens inside NotAcceptedJobOfferts list:

@model  TCCApplication.ViewModels.ProfessionalDashboard

@{
    ViewBag.Title = "Dashboard";
}
@using (Html.BeginForm("AcceptJobOfferts","Professional")){
<div class="row">
    <div class="col-md-5">

        @Html.HiddenFor(model => model.Professional.Id)

        <h2>Minhas tarefas</h2>

        @for (int i = 0; i < Model.AcceptedJobOfferts.Count; i++)
        {

            @Html.HiddenFor(itemModel => Model.AcceptedJobOfferts[i].Id)

            <div class="row">
                <div class="col-md-3">
                    <label>Oferta: </label>
                    @Html.DisplayFor(itemModel => Model.AcceptedJobOfferts[i].Description)
                </div>

                @*<div class="col-md-2">
                    <label>Aceito</label>
                    @Html.DisplayFor(itemModel => Model.AcceptedJobOfferts[i].Accepted)
                </div>*@

                <div class="col-md-5">
                    <label>Data do trabalho</label>
                    @Html.DisplayFor(itemModel => Model.AcceptedJobOfferts[i].JobDate)
                </div>


                @Html.HiddenFor(itemModel => Model.AcceptedJobOfferts[i].Professional.Id)
                @Html.HiddenFor(itemModel => Model.AcceptedJobOfferts[i].Professional.Name)
                @Html.HiddenFor(itemModel => Model.AcceptedJobOfferts[i].Professional.Skills)
                @Html.HiddenFor(itemModel => Model.AcceptedJobOfferts[i].Professional.BirthDate)

                @Html.HiddenFor(itemModel => Model.AcceptedJobOfferts[i].JobDate)
                @Html.HiddenFor(itemModel => Model.AcceptedJobOfferts[i].Active)
                @Html.HiddenFor(itemModel => Model.AcceptedJobOfferts[i].Description)
                @Html.HiddenFor(itemModel => Model.AcceptedJobOfferts[i].Accepted)

            </div>
        }
    </div>
    <div class="col-md-7">

        <h2>Ofertas de trabalho indicadas</h2>

            @for (int i = 0; i < Model.NotAcceptedJobOfferts.Count; i++)
            {

                @Html.HiddenFor(itemModel => Model.NotAcceptedJobOfferts[i].Id)
                @Html.HiddenFor(itemModel => Model.NotAcceptedJobOfferts[i].Description)
                @Html.HiddenFor(itemModel => Model.NotAcceptedJobOfferts[i].Active)
                @Html.HiddenFor(itemModel => Model.NotAcceptedJobOfferts[i].Accepted)
                @Html.HiddenFor(itemModel => Model.NotAcceptedJobOfferts[i].JobDate)

                @Html.HiddenFor(itemModel => Model.NotAcceptedJobOfferts[i].Professional.Id)


                <div class="row">
                    <div class="col-md-3">
                        <label>Oferta: </label>
                        @Html.EditorFor(itemModel => Model.NotAcceptedJobOfferts[i].Description)
                    </div>

                    <div class="col-md-2">
                        <label>Aceito</label>
                        @Html.EditorFor(itemModel => Model.NotAcceptedJobOfferts[i].Accepted)
                    </div>

                    <div class="col-md-5">
                        <label>Data do trabalho</label>
                        @Html.DisplayFor(itemModel => Model.NotAcceptedJobOfferts[i].JobDate)
                    </div>  

                </div>
            }
            <div>
                <input type="submit" value="Aceitar Ofertas" />
            </div>


    </div>

</div>


<div class="row" style="height:50px">




</div>



<div class="row">

    <div class="col-md-12 text-center">
        <div>
            <label>Cliente: </label>

            @Model.Professional.Name
        </div>

        <div>
            <label>Data de nascimento: </label>

            @Model.Professional.BirthDate
        </div>

        <div>
            <label>Telefone: </label>

            @Model.Professional.PhoneNumber
        </div>

        <div>
            <label>Usuário: </label>

            @Model.Professional.UserAccount.Username
        </div>

        <div>
            <label>Profissão: </label>

            @Model.Professional.Profession
        </div>

        <div>
            <label>Bairro: </label>

            @Model.Professional.UserAddress.Neighborhood
        </div>

        <p class="div-to-btn">
            @Html.ActionLink("Alterar informações", "Edit", new { id = @Model.Professional.Id })
        </p>

    </div>
</div>
}

But when I sent the data to controller the object is not updated:

My controller methods:

        public ActionResult ViewMyTasks(int professionalId)
        {
            initBusinessObjects();

            ProfessionalDashboard dashboard = new ProfessionalDashboard();

            var notAcceptedJobOfferts = jobOffertBusiness.GetNotAcceptedJobOfferts(professionalId).ToList();

            var acceptedJobOfferts = jobOffertBusiness.GetAcceptedJobOfferts(professionalId).ToList();
            var professional = professionalBusiness.GetById(professionalId);

            dashboard.AcceptedJobOfferts = acceptedJobOfferts;
            dashboard.NotAcceptedJobOfferts = notAcceptedJobOfferts;
            dashboard.Professional = professional;

            return View(dashboard);
        }

        [HttpPost]
        public ActionResult AcceptJobOfferts(ProfessionalDashboard profDash)
        {
            initBusinessObjects();

            foreach (var jo in profDash.NotAcceptedJobOfferts)
            {
                jobOffertBusiness.Update(jo);
            }

            return RedirectToAction("ViewMyTasks", new { professionalId = profDash.Professional.Id});
        }

What I must to do to my view send updated data?

War es hilfreich?

Lösung

Hidden fields has same name with the inputs which is causes duplicate form keys. You need to remove hiddens or change their name.

@Html.HiddenFor(itemModel => Model.NotAcceptedJobOfferts[i].Description) 
// eg. <input type="hidden" name="NotAcceptedJobOfferts[0].Description" />
...
@Html.EditorFor(itemModel => Model.NotAcceptedJobOfferts[i].Description)
// eg. <input type="text" name="NotAcceptedJobOfferts[0].Description" />

Andere Tipps

try this

@using(Html.BeginForm("Action","Controller",FormMethod.Post))
{
   ...
   ...
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top