什么是“HTML属性”参数?

时间:2016-06-02 10:19:54

标签: asp.net-mvc razor razor-declarative-helpers

以下示例:

@Html.LabelFor(m => m.Email, new { @class = "col-md-2 control-label" })

似乎正在使用LabelFor方法的第二个重载,其中第二个参数htmlAttributes被记录为

  

包含元素

的Html属性的对象

术语“HTML属性”是什么意思,可以用于此对象的语法是什么?

2 个答案:

答案 0 :(得分:5)

HTML元素可以具有属性。例如:

<div class="some-css-class" data-foo="bar" />

此处div的属性为classdata-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