从MVC 5.1开始,可以将html属性添加到编辑器模板中,如下所示:
@Html.EditorFor(m => m.Foo, new { htmlAttributes = new { id = "fooId", @class="fooClass" } })
如果属性Foo
的类型为string
,它将正确生成输入标记,包括自定义属性。
但如果属性Foo
的类型为bool
(或bool?
),则会忽略属性...
我在这里错过了什么吗?生成“选择”标记的模板是否仍然不支持此功能?
答案 0 :(得分:0)
我知道这个问题刚才被问过,但我刚才遇到了同样的问题。事实证明,不同的开发人员在我们的解决方案中为布尔创建了自定义编辑器模板,以便能够自定义下拉列表的文本。您的代码应该适用于编辑器,但它不能自动为自定义编辑器工作......您必须自己实现它。
如果这是您的问题,则需要修改自定义编辑器模板以从ViewData中获取htmlAttributes并将它们传递给基础DropDownListFor(或您正在使用的任何帮助程序)。以下是我的自定义编辑器模板现在的样子:
@model bool?
@using System.Web.Mvc;
@{
var htmlAttributes = ViewData["htmlAttributes"] ?? new { };
@Html.DropDownListFor(model => model,
new List<SelectListItem>(3) {
new SelectListItem { Text = "Unknown", Value = "" },
new SelectListItem { Text = "Yes", Value = "true", Selected = Model.HasValue && Model.Value },
new SelectListItem { Text = "No", Value = "false", Selected = Model.HasValue && !Model.Value }
}, htmlAttributes)
}
这个解释的功劳&amp;解决方案转到https://cpratt.co/html-editorfor-and-htmlattributes