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

时间:2014-12-17 17:52:23

标签: 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>

这个给了我一个错误&#34;无效的匿名类型声明符&#34;因为它包含连字符。基本上我需要actionlink来生成如下的html。

<a href=".../abc?sap-ie=Edge" id="nav_abc" >abc</a>

3 个答案:

答案 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 routeValueshtmlAttributes的匿名对象,因此切换一个意味着同时切换两者。您可以在技术上使用IDictionary param的任何htmlAttributes实现,因此您可能更喜欢仅使用new Dictionary { { "id", "nav_abc" } }。它取决于你。