1

可能重复:
如何在自定义编辑器模板中获取模型的字段名称

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

@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"多次调用相同的编辑模板,例如:

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

显然,这需要生成具有不同名称的下拉菜单。)

4

2 回答 2

4

下拉列表本身已经接收到正确的字段名称。您传递给name参数的任何内容都会连接到字段名称上,从而防止它被识别。

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

@Html.DropDownList("", new SelectList(...))
于 2012-02-15T13:22:11.150 回答
0

这个问题的答案建议使用

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))
}
于 2012-02-15T12:20:00.780 回答