C# 如何在asp.net mvc 5中通过actionlink传递包含连字符的RouteValue

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”}) 这

我有一个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”})
  • 这一个给了我一个错误“无效的匿名类型声明器”,因为它包含连字符

    <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提供。无论如何谢谢哇,看来我忽略了。我根据你的反馈更新了我的答案。谢谢