我在视图中有一个actionlink,我需要它来传递包含连字符( - )的参数。无法更改名称约定。我该怎么做?
<li>@Html.ActionLink("abc", "abc", "abc", new { area = "",sap-ie="Edge" }, new { id = nav_abc"})</li>
这个给了我一个错误&#34;无效的匿名类型声明符&#34;因为它包含连字符。基本上我需要actionlink来生成如下的html。
<a href=".../abc?sap-ie=Edge" id="nav_abc" >abc</a>
答案 0 :(得分:4)
如果您确定网址从您指定的结构中获得了很大的改变,那么您可以使用锚标记并从Url.Action
构建网址。
<a href='@Url.Action("abc", "abc")?sap-ie=Edge'>abc</a>
htmlhelpers的重点是帮助生成html ..所以如果它妨碍了,你可以直接下载到html并完成它。
答案 1 :(得分:2)
您是否尝试过使用ActionLink方法的this重载?
@{
var routeValues = new RouteValueDictionary();
routeValues.Add("sap-ie", "Edge");
routeValues.Add("area", "");
var attributes = new Dictionary<string, object>();
attributes.Add("Id", "nav_abc");
}
@Html.ActionLink("Go to contact page", "Contact", routeValues, attributes)
答案 2 :(得分:2)
只是想指出,下划线技巧不仅仅适用于data
属性,它只适用于传递HTML属性。这是因为在HTML上下文中将下划线更改为连字符是有意义的,因为下划线不用于HTML属性。但是,对于你来说,拥有一个带下划线的路径参数是完全有效的,因此框架不能对你的意图做出任何假设。
如果您需要使用连字符传递路线值,则必须使用RouteValueDictionary
。这只是对无法克服的匿名对象的限制。
<li>@Html.ActionLink("abc", "abc", "abc", new RouteValueDictionary { { "area", "" }, "sap-ie", "Edge" } }, new RouteValueDictionary { { "id", "nav_abc" } })</li>
不幸的是,没有ActionLink
重载同时接受RouteValueDictionary
routeValues
和htmlAttributes
的匿名对象,因此切换一个意味着同时切换两者。您可以在技术上使用IDictionary
param的任何htmlAttributes
实现,因此您可能更喜欢仅使用new Dictionary { { "id", "nav_abc" } }
。它取决于你。