我从几个不同的消息来源获悉,在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有关。
我知道我可以使用该线程中提供的其他解决方案,但如果存在更优雅的解决方案,我宁愿不必使用字典。
任何人都知道我能做些什么来使这件事特别有用吗?
答案 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确实有一些能使你的工作更友好的东西,现在你必须使用字典。