如何在由MVC的HTML Helpers生成的HTML元素中添加class属性?

189

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

我知道可以通过创建一个匿名对象并将其传递给(在这种情况下是第四个)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"}

但是它们也没用,因为下划线会被替换为破折号

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

2个回答

351

若要在 C# 中创建一个匿名类型 (或任何类型),其中包含一个属性,其名称是保留关键字,您可以在属性名称前添加@符号:

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

对于VB.NET,应该使用点号“.”来实现此语法,该语言中的点号是所有匿名类型的默认语法:

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

解析器不够智能,依我看,在代码的那个点上下文给出提示,如果它需要那个提示。 - toddmo

2
目前在CSS开发中的最佳实践是创建更通用的选择器,使用修饰符尽可能广泛地应用于整个网站。我建议避免为单独的页面元素定义不同的样式。
如果CSS类在<form/>元素上的目的是控制表单内元素的样式,可以将class属性添加到现有的<fieldset/>元素上,该元素默认包含了ASP.NET MVC生成的网页中的任何表单。在表单上使用CSS类很少是必要的。

4
您说得没错,但是这种情况有所不同。我正在寻找一种方法来为几个 jQuery 插件指定元数据,通常是通过滥用 class 属性来实现的。 - Adrian Grigore
13
你可以提出最佳实践,但是如果我有一个在表单上使用css的模板,我不会去修改模板来使其“正确”。事实是,客户不会因为你遵循了css的正确用法而愿意多付费用。 - Christian Payne
1
@ChristianPayne 他们未来可能会被迫支付更多的费用,因为你没有支付。 - Ian Warburton
2
我对这个回答进行了负评,因为它没有回答问题。一个更合适的答案应该先回答问题,然后给出最佳实践指导。 - Ben

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接