4

在我的 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 而不是连续的索引字段来索引他的字段:

在 MVC2 中编辑可变长度列表

TIA

4

2 回答 2

0

还不晚在这里回答,

我正在寻找您提供的链接对我有用的东西。IEnumerable现在我知道了如何通过使用模型属性中的添加/删除项目来动态添加上传文件输入EditorFor

对于您的解决方案,我认为UIHint模板可以做任何您想做的事情。在模板中,您可以foreach指定id.

于 2012-10-21T20:25:58.647 回答
0

查看 Jarrett Meyer 的博客文章MVC3 中的嵌套集合模型中概述的解决方案。在这个答案
中 总结了SO。

于 2014-05-06T13:28:29.803 回答