Loss of Collection of a View Model for the Controller [closed]

1

I passed an object that contains a collection with 2 objects from a controller to the view in a typed way. Now I would like the view to pass this same object to another controller .

The call URL passes the Model as object but in the action call, although the object's data is there its collection is gone.

What's happening and how should I handle this?

    
asked by anonymous 15.05.2017 / 21:26

1 answer

1
  

Summary

Add in the list view fields, I've added them as hidden (HiddenFor)

 @for (int i = 0; i < Model.Dependentes.Count; i++)
        {
            @Html.HiddenFor(model => Model.Dependentes[i].Nome)
            @Html.HiddenFor(model => Model.Dependentes[i].DataNascimento)

        }

Complete Solution

  

Models from my example

public class Pessoa
 {

    public string Nome { get; set; }
    public DateTime DataNascimento { get; set; }
    public List<Dependente> Dependentes { get; set; }

 }

public class Dependente
{

    public string Nome { get; set; }
    public DateTime DataNascimento { get; set; }

}
  

Controller

// GET: Pessoa/Edit/
        public ActionResult Edit()
        {
            //Criação do objeto
            Pessoa pessoa = new Pessoa()
            {
                Nome = "José",
                DataNascimento = DateTime.Now,

                Dependentes = new List<Dependente>()
                {

                    new Dependente()
                    {  Nome = "João",
                         DataNascimento = DateTime.Now },

                         new Dependente()
                    {  Nome = "Maria",
                         DataNascimento = DateTime.Now }

                }

            };

            return View(pessoa);
        }

        // POST: Pessoa/Edit/5
        [HttpPost]
        public ActionResult Edit(Pessoa pessoa) // Objeto com lista preenchida
        {
            try
            {
                // Lista de dois itens estão no objeto

                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }
  

View

@model WebApplication7.Models.Pessoa

@{
    ViewBag.Title = "Edit";
}

<h2>Edit</h2>


@using (Html.BeginForm())
{
    @Html.AntiForgeryToken()

    <div class="form-horizontal">
        <h4>Pessoa</h4>
        <hr />
        @Html.ValidationSummary(true, "", new { @class = "text-danger" })
        <div class="form-group">
            @Html.LabelFor(model => model.Nome, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.Nome, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.Nome, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.DataNascimento, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.DataNascimento, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.DataNascimento, "", new { @class = "text-danger" })
            </div>
        </div>

@* Aqui está a lista sendo criado campos ocultos na tela para poderem ser postados para o controller*@
        @for (int i = 0; i < Model.Dependentes.Count; i++)
        {
            @Html.HiddenFor(model => Model.Dependentes[i].Nome)
            @Html.HiddenFor(model => Model.Dependentes[i].DataNascimento)

        }

        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <input type="submit" value="Save" class="btn btn-default" />
            </div>
        </div>
    </div>
}

<div>
    @Html.ActionLink("Back to List", "Index")
</div>

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}
    
18.05.2017 / 15:44