C# 如何在asp.net mvc 5中通过actionlink传递包含连字符的RouteValue
我有一个actionlink在视图中,我需要它来传递包含连字符(-)的参数。无法更改名称约定。我该怎么做C# 如何在asp.net mvc 5中通过actionlink传递包含连字符的RouteValue,c#,html,asp.net-mvc-5,html.actionlink,routevalues,C#,Html,Asp.net Mvc 5,Html.actionlink,Routevalues,我有一个actionlink在视图中,我需要它来传递包含连字符(-)的参数。无法更改名称约定。我该怎么做 <li>@Html.ActionLink("abc", "abc", "abc", new { area = "",sap-ie="Edge" }, new { id = nav_abc"})</li> @Html.ActionLink(“abc”,“abc”,“abc”,new{area=”“,sap ie=“Edge”},new{id=nav_abc”}) 这
<li>@Html.ActionLink("abc", "abc", "abc", new { area = "",sap-ie="Edge" }, new { id = nav_abc"})</li>
@Html.ActionLink(“abc”,“abc”,“abc”,new{area=”“,sap ie=“Edge”},new{id=nav_abc”})
这一个给了我一个错误“无效的匿名类型声明器”,因为它包含连字符
<a href=".../abc?sap-ie=Edge" id="nav_abc" >abc</a>
如果您确定url与您指定的结构不会有太大变化,则可以使用锚定标记并从
url.Action
构建url
<a href='@Url.Action("abc", "abc")?sap-ie=Edge'>abc</a>
htmlhelpers的全部目的是帮助生成html。因此,如果它妨碍了您的工作,您可以直接使用html来完成它。您是否尝试过使用ActionLink方法的重载
@{
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)
@{
var routeValues=新的RouteValueDictionary();
RouteValue.Add(“sap ie”、“Edge”);
routeValues.Add(“area”,”);
var attributes=newdictionary();
添加(“Id”、“nav_abc”);
}
@ActionLink(“转到联系人页面”、“联系人”、路由值、属性)
只是想指出,下划线技巧并不是只适用于数据
属性,而是它通常只适用于传递HTML属性。这是因为在HTML上下文中将下划线更改为连字符是有意义的,因为在HTML属性中不使用下划线。然而,它是完全有效的对于您来说,需要一个带有下划线的route参数,这样框架就不会对您的意图做出任何假设
如果需要使用连字符传递路由值,则必须使用RouteValueDictionary
。这只是无法克服的匿名对象限制
<li>@Html.ActionLink("abc", "abc", "abc", new RouteValueDictionary { { "area", "" }, "sap-ie", "Edge" } }, new RouteValueDictionary { { "id", "nav_abc" } })</li>
@Html.ActionLink(“abc”、“abc”、“abc”、新RouteValueDictionary{{{“area”、“}”、“sap ie”、“Edge”})、新RouteValueDictionary{{{“id”、“nav_abc”})
不幸的是,没有一个
ActionLink
重载同时接受routeValues
的RouteValueDictionary
和htmlAttributes
的匿名对象,因此切换一个就意味着同时切换两个。从技术上讲,您可以对htmlAttributes
使用任何IDictionary
实现m、 所以你可能更喜欢使用新字典{{“id”,“nav_abc”}
。这取决于你。我试过了。但它生成的是“sap_ie”,而不是“sap ie”“@user3273146我已经修改了我的答案。。。这行吗?行。这很有效。希望SAP将来不会改变这一点。谢谢我尝试了你的方法和斯卡塔格的两种方法。您的缺少区域,id应作为htmlattribute而不是RouteValue提供。无论如何谢谢哇,看来我忽略了。我根据你的反馈更新了我的答案。谢谢