如何将类属性添加到MVC的HTML Helpers生成的HTML元素中?

时间:2009-05-18 19:06:47

标签: asp.net-mvc razor html-helper

ASP.NET MVC可以使用HTML帮助程序生成HTML元素,例如@Html.ActionLink()@Html.BeginForm()等等。

我知道我可以通过创建anonymous object来指定表单属性,并为该对象传递(在本例中为第四个)htmlAttributes参数,其中为元素指定id

Html.BeginForm("Foo", "Bar", FormMethod.Post, new { id = "MyForm"})

但是class属性怎么样?显然这不起作用:

Html.BeginForm("Foo", "Bar", FormMethod.Post, new { class = "myclass"})

因为在请求我的视图时,它只会抛出随机语法错误,因为它在遇到C#关键字class后需要其他东西。

我也试过了:

new { _class = "myclass"}

new { class_ = "myclass"}

但它们也不起作用underscores get replaced by dashes

我知道我也可以手工编写HTML元素或将表单包装在<div class="myClass">中,但我仍然有兴趣知道它应该如何完成。

2 个答案:

答案 0 :(得分:348)

为了使用在C#中具有reserved keyword作为名称的属性创建匿名类型(或任何类型),您可以在属性名称前添加一个at符号@:< / p>

Html.BeginForm("Foo", "Bar", FormMethod.Post, new { @class = "myclass"})

对于使用点.完成的VB.NET this syntax would be,该语言是all anonymous types的默认语法:

Html.BeginForm("Foo", "Bar", FormMethod.Post, new with { .class = "myclass" })

答案 1 :(得分:3)

目前CSS开发的最佳实践是创建更多通用选择器,其中包含可在整个网站中尽可能广泛应用的修饰符。我会尽量避免为单个页面元素定义单独的样式。

如果<form/>元素上的CSS类的目的是控制表单中元素的样式,则可以添加类属性,即默认情况下封装任何表单的现有<fieldset/>元素。 ASP.NET MVC生成的网页。很少需要表单上的CSS类。