Dan*_*l W 6 html c# routevalues html.actionlink asp.net-mvc-5
我有一个actionlink,我需要它来传递包含连字符( - )的参数.无法更改名称约定.我该怎么做呢?
<li>@Html.ActionLink("abc", "abc", "abc", new { area = "",sap-ie="Edge" }, new { id = nav_abc"})</li>
Run Code Online (Sandbox Code Playgroud)
这个给我一个错误"无效的匿名类型声明符",因为它包含连字符.基本上我需要actionlink来生成如下的html.
<a href=".../abc?sap-ie=Edge" id="nav_abc" >abc</a>
Run Code Online (Sandbox Code Playgroud)
如果您确定url与您指定的结构相比不会有太大变化,则可以使用锚标记并从中构建url Url.Action。
<a href='@Url.Action("abc", "abc")?sap-ie=Edge'>abc</a>
Run Code Online (Sandbox Code Playgroud)
htmlhelpers的全部要点是无论如何都将帮助生成html。因此,如果它妨碍了您,则可以将其放到html适当的位置并完成它。
只是想指出,下划线技巧并不只适用于data属性,而是一般只适用于传递 HTML 属性。这是因为在 HTML 上下文中将下划线更改为连字符是有意义的,因为 HTML 属性中不使用下划线。但是,使用带下划线的路由参数对您来说是完全有效的,因此框架无法对您的意图做出任何假设。
如果需要传递带有连字符的路由值,则必须使用RouteValueDictionary. 这只是匿名对象无法克服的限制。
<li>@Html.ActionLink("abc", "abc", "abc", new RouteValueDictionary { { "area", "" }, "sap-ie", "Edge" } }, new RouteValueDictionary { { "id", "nav_abc" } })</li>
Run Code Online (Sandbox Code Playgroud)
不幸的是,没有ActionLink重载可以同时接受RouteValueDictionaryforrouteValues和匿名对象 for htmlAttributes,因此切换其中一个就意味着同时切换两者。从技术上讲,您可以使用参数的任何IDictionary实现htmlAttributes,因此您可能更喜欢仅使用new Dictionary { { "id", "nav_abc" } }. 由你决定。