2010-11-09 65 views
4

我从几个不同的消息来源得知,当在ASP.NET MVC2中使用HTML助手时,可以使用破折号创建自定义属性(例如,<数据 - rowId =“5”>)通过使用下划线代替破折号,并且当HTML写入页面时,下划线将被破折号替换。ASP.NET MVC2不会用HtmlAttributes中的破折号代替下划线

所以,这样的事情:

<%= 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有关。

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

任何人都知道是否有简单的事情我可以做到让这个特定的事情工作?

回答

4

不完全是最优雅的solution但可能接受:

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

在一个侧面说明:data-rowId是根据标准的文档类型,所以也许最优雅的解决办法是摆脱在HTML完全无效的属性它:-)

+2

Data-属性对HTML 5有效。http://dev.w3.org/html5/spec/elements.html#embedding-custom-non-visible-data – 2010-11-20 20:33:33

+0

@Erik Philips,HTML5仍然是草稿并没有得到所有浏览器的支持,但好点。 – 2010-11-20 20:35:25

+0

我希望这不是答案,但无法找到更好的方法。我以为我看到某个地方的下划线被提升为破折号......哦! – Jafin 2011-07-27 06:32:32

0

考虑一下ASP.NET MVC的设计目的。它旨在让您可以严格控制您制作的HTML。如果某些东西无法访问,则不必通过箍环来修复它。你想要做的是创建无效的HTML或XHTML。而不是试图使HTML无效简化为只使用一个ID。可访问性准则中的#1是HTML对声明的类型有效。

只要文档中的ID是唯一的,就可以满足HTML的一致性 - 并且使用jQuery进行操作会更容易。

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

顺便说一句,MVC 3 RC今天出来了。


编辑

与HTML5功能播放,而 “闪亮” 和库尔,是不稳定的。规范的许多部分每周更换一次。当最终规范发布时,现在认为好的可能并不好。 MVC 3确实有一些东西可以让你的工作更友好,因为现在你必须使用字典。

+0

我们使用新的HTML5文档类型,只要格式为“data-whatever”,就可以在任何html元素上自定义数据属性。这是完全有效的HTML。 http://html5doctor.com/html5-custom-data-attributes/ – Isochronous 2010-11-10 15:29:42

+0

需要考虑的两件事:“id”比data-rowId更合适,属性仍然无效(根据规范没有大写字母)。相反,它应该是“data-row-id”。字典方法是MVC 2中唯一可用的方法来执行您想要的操作。 – 2010-11-10 15:39:20

+0

我无法使用“id”,因为页面上可能有两个不同的列表,每个列表都有不同的数据集,并且在一个列表中可能有一行与第二个列表中的行具有相同的id。我知道HTML5规范很难定稿,但自定义数据属性似乎是规范中非常稳定的一部分。另外,使用HTML5的决定来自我的部门负责人,所以我不会告诉他他试图成为“闪亮”和“酷酷”。我更喜欢低调的答案,但无论如何感谢。 – Isochronous 2010-11-10 16:00:48

3

System.Web.Mvc.HtmlHelper提供了一个静态方法,做你在找什么:

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

这种方法将取代下划线连字符 - 正如有人指出的,虽然,一定要使用全部小写的属性名称,这是符合HTML5的。

相关问题