我试图在我的ASP.NET MVC 1项目中使用HTML5 data- attributes . (我是C#和ASP.NET MVC的新手 . )
<%= Html.ActionLink("« Previous", "Search",
new { keyword = Model.Keyword, page = Model.currPage - 1},
new { @class = "prev", data-details = "Some Details" })%>
上面的htmlAttributes中的“data-details”给出以下错误:
CS0746: Invalid anonymous type member declarator. Anonymous type members
must be declared with a member assignment, simple name or member access.
它在我使用data_details时有效,但我想它需要按照规范以“data-”开头 .
我的问题:
-
有没有办法让这个工作并使用HTML5数据属性与Html.ActionLink或类似的Html助手?
-
是否有其他替代机制将自定义数据附加到元素?此数据稍后将由JS处理 .
8 回答
它比上面提到的一切都更容易 . MVC中包含破折号( - )的数据属性通过使用下划线(_)来满足 .
我看到JohnnyO已经提到了这一点 .
Update: MVC 3 and newer versions have built-in support for this. See JohnnyO's highly upvoted answer below for recommended solutions.
我不认为有任何直接的帮助来实现这一点,但我有两个想法让你尝试:
只是想法,没有测试过 .
这个问题已在ASP.Net MVC 3中得到解决 . 它们现在自动将html属性属性中的下划线转换为破折号 . 他们在这个问题上很幸运,因为下划线在html属性中是不合法的,所以当你使用下划线时,MVC可以自信地暗示你喜欢破折号 .
例如:
将在MVC 3中呈现:
如果你还在使用旧版本的MVC,你可以通过创建我从MVC3的源代码中借用的静态方法来模仿MVC 3正在做的事情:
然后你可以像这样使用它:
这将呈现正确的data- *属性:
在mvc 4中可以使用下划线(“_”)渲染
Razor:
Rendered Html
您可以使用新的Html辅助扩展函数来实现它,然后它将与现有的ActionLink类似地使用 .
你这么称呼它......
简单:-)
edit
更多的写作here
我最终使用了正常的超链接和
Url.Action
,如下所示:它_1134024_对
a
标签有了更多的控制权,这在大量的AJAXified网站中有时很有用 .HTH
我不喜欢使用纯粹的“a”标签,打字过多 . 所以我来解决方案 . 看起来它看起来
Dic类的实现
你可以像这样使用它:
In Mvc:
In Html: