У меня есть два объекта, которые я передаю в View, а затем обратно в контроллер.
public class Category1Dictionary
{
public int Id { get; set; }
public IList<Category2Dictionary> SubCategories {get; set;}
public string UserName { get; set; }
}
public class Category2Dictionary
{
public int Id { get; set; }
public string Category2Item { get; set; }
}
Мой взгляд выглядит так:
@model Budget.Models.Category1Dictionary
@{
ViewBag.Title = "Edit";
Layout = "~/Views/Shared/_Layout.cshtml";
}
@using (Html.BeginForm())
{
<div class="form-horizontal">
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(m => m.Id)
@Html.HiddenFor(m => m.UserName)
@Html.HiddenFor(m => m.SubCategories)
@Html.LabelFor(m => m.Category1Item, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="form-group">
<div class="col-md-10">
@Html.EditorFor(m => m.Category1Item, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(m => m.Category1Item, "", new { @class = "text-danger" })
</div>
@for (int i = 0; i < Model.SubCategories.Count; i++)
{
<div class="col-md-10" style="padding-left:40px">
@Html.EditorFor(m => m.SubCategories[i].Category2Item, new { htmlAttributes = new { @class = "form-control" } })
@Html.HiddenFor(m => m.SubCategories[i].Id, new { htmlAttributes = new { @class = "form-control" } })
</div>
}
</div>
<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>
}
И действие в контроллере:
[HttpPost]
public ActionResult Edit(Category1Dictionary category1Dictionary)
{
return View(category1Dictionary);
}
С этим макетом в действии я получаю объект Category1Dictionary со всеми элементами, но SubCategories равен NULL. Я видел несколько похожих постов, но я потратил всего 6 часов на это и все еще могу заставить его работать ...
Метод получения:
public ActionResult Edit(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Category1Dictionary category1Dictionary = db.Category1Dictionaries.Include(p=>p.SubCategories).First(c=>c.Id == id);
if (category1Dictionary == null)
{
return HttpNotFound();
}
return View(category1Dictionary);
}
РЕДАКТИРОВАТЬ: поле ввода, сгенерированное EditorFor ![enter image description here](https://i.stack.imgur.com/1S2Iz.png)
Сообщение от скрипача: ![enter image description here](https://i.stack.imgur.com/W1j0f.png)