在我的 MVC4 项目中,我有一个包含产品视图模型集合的类别视图模型。我使用编辑器模板来呈现单个产品视图模型,并将产品视图模型的集合传递给它:
类别视图模型:
@model CategoryViewModel
@using MVC4PartialViews.Models.ViewModels
<div class="editor-field">
@Html.EditorFor(model => model.CategoryName)
@Html.ValidationMessageFor(model => model.CategoryName)
</div>
@Html.EditorFor(x => x.Products)
呈现集合中每个产品的编辑器模板:
<div class="editor-field">
@Html.EditorFor(model => model.ProductName)
@Html.ValidationMessageFor(model => model.ProductName)
</div>
// etc.
这非常有效,因为它会自动正确命名和索引元素,因此所有产品都会作为父类别视图模型的一部分回发 - 这是它输出的内容:
<div class="editor-field">
<input class="text-box single-line" id="Products_0__ProductName" name="Products[0].ProductName" type="text" value="Add 1st product for this Category" />
<span class="field-validation-valid" data-valmsg-for="Products[0].ProductName" data-valmsg-replace="true"></span>
</div>
我需要让用户添加和删除产品。要添加一个新的,我需要以某种方式动态呈现编辑器模板以创建新产品并正确索引/命名每个字段,即如果我已经有 2 个产品(索引 0 和 1),那么新产品需要命名为这样的:
Products[2].ProductName
我读过 Steve Sanderson 的这篇文章,但它看起来很笨拙,他用 Guid 而不是连续的索引字段来索引他的字段:
TIA