如何向由MVC的HTML帮助器生成的HTML元素添加类属性?


188

ASP.NET MVC可使用HTML助手,例如生成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">,但我仍然想知道应该怎么做。

Answers:


348

为了创建匿名类型(或任何类型),并在C#中使用以保留关键字作为名称的属性,可以在属性名称前添加at符号@

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

对于VB.NET,此语法将使用点()完成,该点.在该语言中是所有匿名类型的默认语法:

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

解析器不够聪明,IMO,如果给定它当时在代码中所处的上下文,则它需要该提示。
toddmo'1

3

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

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


4
您当然是对的,但是这种情况有所不同。我正在寻找一种为一些jquery插件指定元数据的方法。这通常是通过滥用class属性来完成的。
阿德里安·格里戈里

13
您可以提出最佳实践,但是,如果我有一个在表单上使用CSS的模板,那么我不会去砍模板以使其“正确”。现实情况是,客户不会花更多的钱,因为您通过css做了正确的事……
Christian Payne 2012年

1
@ChristianPayne他们将来可能会被迫支付更多,因为您没有。
伊恩·沃伯顿

1
我对此回答投了反对票,因为它没有回答问题。一个更合适的答案将首先回答该问题,然后提供最佳实践指导。
2016年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.