ASP.NET MVC2不在HtmlAttributes中用短划线替换下划线

时间:2010-11-09 23:02:09

标签: asp.net asp.net-mvc-2 html-helper custom-attributes html

我从几个不同的消息来源获悉,在ASP.NET MVC2中使用HTML帮助程序时,可以使用破折号创建自定义属性(例如< a data-rowId =“5”>)一个下划线代替短划线,当HTML写入页面时,下划线将被破折号替换。

所以,像这样:

<%= HtmlActionLink(Model.Name, "MyView", null, new {data_rowId = Model.id}) %>

应呈现为

<a data-rowId="0" href="myURL">Row Name</a>

但是......事实并非如此。我想也许这个功能只能在MVC3 Beta预览版中启用(正如它在MVC3预览版本中所提到的那样),但是this thread是关于同一件事的,而且它与MVC2有关。

我知道我可以使用该线程中提供的其他解决方案,但如果存在更优雅的解决方案,我宁愿不必使用字典。

任何人都知道我能做些什么来使这件事特别有用吗?

3 个答案:

答案 0 :(得分:4)

不是最优雅的solution,但可能是可以接受的:

<%= Html.ActionLink(
    Model.Name, 
    "MyView", 
    null, 
    new Dictionary<string, string> { { "data-rowId",  Model.id } }
) %>

旁注:根据标准文档类型,data-rowId是HTML中完全无效的属性,因此最优雅的解决方案可能是摆脱它: - )

答案 1 :(得分:3)

System.Web.Mvc.HtmlHelper提供了一种静态方法,可以满足您的需求:

<%= Html.ActionLink(
    Model.Name, 
    "MyView", 
    null, 
    HtmlHelper.AnonymousObjectToHtmlAttributes(new { data_row_id: Model.id })
) %>

此方法将使用连字符替换下划线 - 正如有人指出的那样,请确保使用符合HTML5的全小写属性名称。

答案 2 :(得分:0)

考虑一下ASP.NET MVC的设计目的。它旨在让您严格控制您生成的HTML。如果无法访问某些内容,则无需通过环节来修复它。您要做的是创建无效的HTML或XHTML。而不是试图使无效的HTML简化为仅使用ID。可访问性指南的第1条是HTML对声明的类型有效。

只要ID在文档中是唯一的,您就可以满足HTML一致性 - 并且可以更轻松地使用jQuery进行操作。

如果可以,为什么要尝试创建无效的HTML?或者这是一种专有的XML格式?

BTW,MVC 3 RC今天问世。


修改

使用HTML5功能,虽然“闪亮”和kool,但不稳定。规范的许多部分每周都在变化。当最终规范发布时,现在被认为是好的可能并不好。 MVC 3确实有一些能使你的工作更友好的东西,现在你必须使用字典。