7

我有一个操作链接,我需要它来传递包含连字符 (-) 的参数。无法更改名称约定。我该怎么做呢?

<li>@Html.ActionLink("abc", "abc", "abc", new { area = "",sap-ie="Edge" }, new { id = nav_abc"})</li>

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

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

3 回答 3

6

如果您确定 url 不会与您指定的结构发生太大变化,您可以使用锚标记并从Url.Action.

<a href='@Url.Action("abc", "abc")?sap-ie=Edge'>abc</a>

htmlhelpers 的全部意义在于帮助生成 html .. 所以如果它妨碍了你,你可以直接下拉到 html 并完成它。

于 2014-12-17T17:54:20.623 回答
3

您是否尝试过使用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)
于 2014-12-17T18:02:15.433 回答
3

只是想指出,下划线技巧并不是只适用于data属性,而是它通常只适用于传递 HTML 属性。这是因为在 HTML 上下文中将下划线更改为连字符是有意义的,因为在 HTML 属性中不使用下划线。但是,拥有带下划线的路由参数是完全有效的,因此框架不会对您的意图做出任何假设。

如果您需要使用连字符传递路由值,则必须使用RouteValueDictionary. 这只是无法克服的匿名对象的限制。

<li>@Html.ActionLink("abc", "abc", "abc", new RouteValueDictionary { { "area", "" }, "sap-ie", "Edge" } }, new RouteValueDictionary { { "id", "nav_abc" } })</li>

不幸的是,没有ActionLink接受RouteValueDictionaryforrouteValues和匿名对象 for的重载htmlAttributes,因此切换一个意味着切换两者。从技术上讲,您可以对参数使用任何IDictionary实现htmlAttributes,因此您可能更喜欢仅使用new Dictionary { { "id", "nav_abc" } }. 由你决定。

于 2014-12-17T18:43:27.200 回答