2

在我的 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>

如何将编辑器模板中的字段绑定到淘汰赛?我可以以某种方式访问​​或使用编辑器模板用来命名元素的索引值吗?我可以在父(类别)视图模型中绑定字段没有问题,如下所示:

<script>
    window.defaultCategory = @Html.Raw(Json.Encode(Model));
</script>

@Html.TextBoxFor(
    model => model.CategoryName,
    new Dictionary<string, object>
    {
        {"style", "width: 30%;"},
        {"placeholder", "Please enter the Category name"},
        { "data-bind", "value: currentCategory.CategoryName" }
    })

我需要生成这样的东西,其中 [n] 是编辑器模板在呈现 Products 集合中的每个产品时生成的索引值:

{ "data-bind", "value: currentCategory.Products[n].ProductName" }

或者应该是这样的:

{ "data-bind", "value: currentCategory.Products()[n].ProductName" }

所有帮助或想法表示赞赏:)

4

1 回答 1

1

您可以从 TemplateInfo 中提取当前索引:

@model ProductViewModel

<div class="editor-field">    
    @Html.TextBoxFor(
        model => model.ProductName,
        new {
            style = "width: 30%;",
            placeholder = "Please enter the Category name",
            data_bind = string.Format(
                "value: currentCategory.{0}.ProductName",
                ViewData.TemplateInfo.HtmlFieldPrefix
            )
        }
    )
    @Html.ValidationMessageFor(model => model.ProductName)
</div>
于 2012-07-20T12:48:44.997 回答