以下示例:
@Html.LabelFor(m => m.Email, new { @class = "col-md-2 control-label" })
似乎正在使用LabelFor
方法的第二个重载,其中第二个参数htmlAttributes
被记录为
包含元素
的Html属性的对象
术语“HTML属性”是什么意思,可以用于此对象的语法是什么?
答案 0 :(得分:5)
HTML元素可以具有属性。例如:
<div class="some-css-class" data-foo="bar" />
此处div
的属性为class
和data-foo
。
Razor接受htmlAttributes
参数的各种HTML帮助函数将提供的对象转换为属性。
您可以使用匿名类型将其属性转换为属性名称,并将其值转换为相应属性的值。
例如:
new
{
@class = "some-css-class",
data_foo = "bar"
}
这将转换为上面显示的属性。
属性名称中的下划线被转换为破折号(How to specify data attributes in razor, e.g., data-externalid="23151" on @this.Html.CheckBoxFor(...)),并且@
之前的@class
是必需的,因为class
是一个无法使用的保留关键字不使用@
(How can I add a class attribute to an HTML element generated by MVC's HTML Helpers?)转义它。
还有一个overload accepting IDictionary<string, object> htmlAttributes
,所以您也可以改为传递字典:
new Dictionary<string, object>
{
{ "class", "some-css-class" },
{ "data-foo", "bar" }
}
答案 1 :(得分:0)
我尝试根据ViewModel属性动态设置htmlAttributes。但是,在使用匿名类型时,如果每个选项使用不同的html属性,则编译器将无法解析该类型。 命名对象“对象”会给诸如@class之类的标记属性带来编译器错误: “对象不包含类的定义'
将对象转换为字典可解决此问题。
child