在我的MVC4项目中,我有一个带有Product视图模型集合的Category视图模型。我使用编辑器模板渲染单个产品视图模型,并将Product视图模型的集合传递给它:
类别视图模型:
@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
我已经读过史蒂夫·桑德森的这篇文章,但看起来很笨重,他用Guid而不是连续的索引字段索引他的字段:
Editing a variable length list in MVC2
TIA
答案 0 :(得分:0)
在这里回答不迟,
我正在寻找您提供给我的链接有用的东西。现在我知道如何使用IEnumerable
中模型的EditorFor
属性中的添加/删除项来动态添加上传文件输入。
对于您的解决方案,我认为UIHint
and template可以做您想做的任何事情。在模板内,您可以foreach
并指定id
的格式。
答案 1 :(得分:0)
查看Jarrett Meyer博客文章Nested Collection Models in MVC3中列出的解决方案 在this answer上总结了SO。