Если в моей модели Product
есть член ICollection<ProductOption>
, как мне перестроить мой Product
с коллекцией элементов в моем методе Controller.Edit(...)
при отправке сообщения из Edit
?
(Можно предположить, что мы никогда не добавляем и не удаляем опцию, только когда-либо редактируем.)
Бритва:
@model Models.Products.Product
@{
ViewBag.Title = "Edit";
Layout = "~/Views/Shared/_GlobalLayout.cshtml";
}
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
@Html.HiddenFor(model => model.Id)
<legend>Product</legend>
<div class="editor-label">
@Html.LabelFor(model => model.Name)
</div>
@foreach (ProductOption option in Model.Options)
{
<div style="border:1px solid black; margin: 5px; padding:5px 7px;">
@Html.Partial("_ProductOptionInput", option)
</div>
}
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
}
Контроллер:
[HttpPost]
public ActionResult Edit(int id, FormCollection collection)
{
var p = _repository.ById(id);
UpdateModel<Product>(p);
_repository.SaveChanges();
return RedirectToAction("Index");
}
частичный вид:
@modelModels.Products.ProductOption
@Html.ValidationSummary(true)
<fieldset>
<legend>ProductOption</legend>
@Html.HiddenFor(model => model.Id)
<div class="editor-label">
@Html.LabelFor(model => model.Term)
</div>
</fieldset>
UPDATE
My FormCollection
в ActionResult Edit(int id, FormCollection collection)
по сути является словарем, поэтому он содержит значения ProductOption
для одного из обновленных ProductOption
s, но не для остальных из них в качестве ключей (то есть свойство ProductOption
s имена) не может повторяться в словаре.