可能重复:
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)
显然,这需要使用不同的名称生成下拉列表。)
答案 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))
}