C# 在MVC编辑后重建ICollection?
如果我的型号C# 在MVC编辑后重建ICollection?,c#,.net,asp.net-mvc-3,razor,C#,.net,Asp.net Mvc 3,Razor,如果我的型号产品有一个成员ICollection如何使用我的控制器中的成员集合重建我的产品。在从编辑发回时编辑(…)方法 (我们可以假设从不添加或删除选项,只进行编辑。) 剃刀: @model Models.Products.Product @{ ViewBag.Title = "Edit"; Layout = "~/Views/Shared/_GlobalLayout.cshtml"; } @using (Html.BeginForm()) { @Html.V
产品
有一个成员ICollection
如何使用我的控制器中的成员集合重建我的产品
。在从编辑
发回时编辑(…)
方法
(我们可以假设从不添加或删除选项,只进行编辑。)
剃刀:
@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>
}
@model Models.Products.Product
@{
ViewBag.Title=“编辑”;
Layout=“~/Views/Shared/_GlobalLayout.cshtml”;
}
@使用(Html.BeginForm()){
@Html.ValidationSummary(true)
@Html.HiddenFor(model=>model.Id)
产品
@LabelFor(model=>model.Name)
@foreach(Model.Options中的ProductOption选项)
{
@Html.Partial(“\u ProductOptionInput”,option)
}
}
控制器:
[HttpPost]
public ActionResult Edit(int id, FormCollection collection)
{
var p = _repository.ById(id);
UpdateModel<Product>(p);
_repository.SaveChanges();
return RedirectToAction("Index");
}
[HttpPost]
公共操作结果编辑(int id,FormCollection集合)
{
var p=_repository.ById(id);
更新模型(p);
_SaveChanges();
返回操作(“索引”);
}
局部视图:
@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>
@modelModels.Products.ProductOption
@Html.ValidationSummary(true)
产品选项
@Html.HiddenFor(model=>model.Id)
@LabelFor(model=>model.Term)
更新
ActionResult Edit(int-id,FormCollection collection)
中的我的FormCollection
本质上是一个字典,因此它有更新的ProductOption
中的一个ProductOption
的值,但没有其他值作为键(即ProductOption
s属性名)不能在字典中重复。您需要编写自己的模型绑定器(用于ICollection
或将实体从数据库中拉出而不是实例化新实例的绑定器),或者您不能将模型作为参数引入,而是在操作方法中将其从数据库中拉出,然后从控制器调用TryUpdateModel
HTH我在Razor视图中添加了以下内容,它就像一个符咒
@Html.EditorFor(model => model.Options.ToList()[0], templateName: "ProductOptionInput", htmlFieldName: "Options[0]")
@Html.EditorFor(model => model.Options.ToList()[1], templateName: "ProductOptionInput", htmlFieldName: "Options[1]")