如果我的模型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>
更新
我在
FormCollection
中的ActionResult Edit(int id, FormCollection collection)
本质上是一本字典,因此它具有更新的ProductOption
之一的ProductOption
值,但没有其余值,因为键(即ProductOption
的属性名称)可以在字典中不再重复。 最佳答案
您可能需要编写自己的模型绑定程序(用于ICollection<ProductOption>
或将实体从数据库中拉出而不是实例化新实例的绑定器),或者不能将模型用作参数,而是将其拉出从您的操作方法中移出数据库,然后从控制器中调用TryUpdateModel
。
高温超导
关于c# - 在MVC编辑后重建ICollection吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4724504/