在自定义编辑器模板中,如何访问我应该用于编辑控件的字段名称?

时间:2012-02-15 12:15:08

标签: asp.net-mvc asp.net-mvc-3 editortemplates

  

可能重复:
  How to get model's field name in custom editor template

当输出特殊类型实体的编辑控件时,例如,让我们说一种颜色或其他东西:

@Html.EditorFor(product => product.Color)

我想要输出一个下拉列表,所以我尝试创建一个自定义编辑器模板,它将呈现这样一个下拉列表。这是我的模板到目前为止的样子:

@model MyProject.Models.Color
@using (var db = new MyProject.Models.DbContext())
{
    @Html.DropDownList(???,
        new SelectList(db.Colors, "Id", "Name", Model))
}

我需要放置什么而不是??? - 为下拉列表指定HTML name属性的参数?


(出于显而易见的原因,它不只是"Color"。考虑对相同类型的不同字段的相同编辑模板进行多次调用,例如:< / p>

@Html.EditorFor(product => product.InnerColor)
@Html.EditorFor(product => product.OuterColor)

显然,这需要使用不同的名称生成下拉列表。)

2 个答案:

答案 0 :(得分:3)

下拉列表已经单独接收正确的字段名称。您传入name参数的任何内容都会将连接到字段名称,从而阻止其被识别。

正确的解决方案是传递空字符串:

@Html.DropDownList("", new SelectList(...))

答案 1 :(得分:0)

this question的回答建议使用

ViewData.TemplateInfo.HtmlFieldPrefix

所以完整的代码就像

一样
@model MyProject.Models.Color
@using (var db = new MyProject.Models.DbContext())
{
    @Html.DropDownList(ViewData.TemplateInfo.HtmlFieldPrefix + "_Color",
        new SelectList(db.Colors, "Id", "Name", Model))
}