【问题标题】:How to pass routeValues that contains hyphen via actionlink in asp.net mvc 5如何通过asp.net mvc 5中的actionlink传递包含连字符的routeValues
【发布时间】:2015-02-16 08:48:42
【问题描述】:

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

<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>

【问题讨论】:

    标签: c# html asp.net-mvc-5 html.actionlink routevalues


    【解决方案1】:

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

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

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

    【讨论】:

    • 我试过了。但是会生成“sap_ie”,而不是“sap-ie”
    • @user3273146 我已经修改了我的答案...这行得通吗?
    • 是的。那行得通。只是希望 SAP 不打算在未来改变这一点。谢谢!
    【解决方案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 重载可以同时接受RouteValueDictionaryrouteValues 和匿名对象htmlAttributes,因此切换一个意味着切换两者。从技术上讲,您可以将任何IDictionary 实现用于htmlAttributes 参数,因此您可能更喜欢只使用new Dictionary { { "id", "nav_abc" } }。这取决于你。

    【讨论】:

      【解决方案3】:

      您是否尝试过使用 this 重载 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)
      

      【讨论】:

      • 我尝试了你的方法和 Scartag 的两种方法。你的缺少区域,id 应该作为 htmlattribute 而不是 routevalues。还是谢谢
      • 哎呀,看来我忽略了这一点。我根据您的反馈更新了我的答案。谢谢!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-01
      • 2018-02-28
      • 2016-10-18
      • 2013-10-21
      • 2015-02-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多