Сериализация модели MVC с частичным классом не будет работать - PullRequest
0 голосов
/ 17 апреля 2019

Я прошел весь день с проблемой сериализации с вложенными свойствами (в частности, с массивом) и MVC. Я создал простой код, чтобы показать вам упрощение. Я предполагаю, что я только что гуглил и пытался даже поставить Items[0].Id в качестве имени помощника html.

Кстати, вот код *, может быть, вы можете предоставить мне рабочее и чистое решение.

@using (Ajax.BeginForm("Salva", "Home", new AjaxOptions(){ HttpMethod = "POST"}))
{
<div class="row">
    @for (int i = 0; i < Model.Items.Length; i++)
    {
        @Html.Partial("_Item", Model.Items[i])
    }
</div>
<input value="click" type="submit"/>
}

Модели

namespace WebApplication2.Models
{
public class SomeClass
{
    public Internal[] Items { get; set; }
}

public class Internal
{
    public DateTime? Date { get; set; }

    public int Id { get; set; }
}

}

а вот и контроллер

 public class HomeController : Controller
{
    public ActionResult Index()
    {
        var model = new SomeClass();

        var lst = new List<Internal>();

        for (int i = 0; i < 3; i++)
        {
            lst.Add(new Internal{Id = i});
        }
        model.Items = lst.ToArray();
        return View(model);
    }


    [HttpPost]
    public ActionResult Salva(SomeClass model)
    {
        return Json(true);
    }
}

и вот _Item.cshtml

    @model namespace.Internal

     Html.TextFor(m=>m.Date)

Я надеялся, что создание простого предмета очистит мои сомнения и увидит, где я ошибаюсь в реальном проекте, но без удачи ... что я делаю неправильно?

Спасибо enter image description here

1 Ответ

1 голос
/ 17 апреля 2019

Вы можете изменить отображение между model и view.

Для отображения вашего входного имени должно быть указано имя someClass.Items[" + ViewBag.Index + "].Date

[HttpPost]
        public ActionResult Salva(SomeClass someClass)
        {
            return Json(true);
        }

In _Item.cshtml

@model WebApplication1.Controllers.Internal

    @Html.TextBoxFor(m => m.Date,  htmlAttributes : new  { Name = "someClass.Items[" + ViewBag.Index + "].Date" })

In Index.cshtml

@using (Ajax.BeginForm("Salva", "Users", new AjaxOptions(){ HttpMethod = "POST"}))
{
    <div class="row">
        @for (int i = 0; i < Model.Items.Length; i++)
        {
            ViewBag.Index = i;
            @Html.Partial("_Item", Model.Items[i])
        }
    </div>
    <input value="click" type="submit"/>
}
...