【问题标题】:Changing single route parameter in ActionLink在 ActionLink 中更改单个路由参数
【发布时间】:2012-11-30 02:43:33
【问题描述】:

我正在尝试实现一个在所有页面上都可见的语言选择器。

我的申请目前有两条路线:

routes.MapRoute(
    name: "EventDriven",
    url: "{language}/{eventid}/{controller}/{action}/{id}",
    defaults: new { language = "en", controller = "Home", action = "Index", id = UrlParameter.Optional }
);

routes.MapRoute(
    name: "Default",
    url: "{language}/{controller}/{action}/{id}",
    defaults: new { language = "en", controller = "Home", action = "Index", id = UrlParameter.Optional }
);

在我共享的_layout.cshtml 文件中,我有以下操作链接:

@Html.ActionLink("English", ViewContext.RouteData.Values["action"].ToString(), new {language="en"})
@Html.ActionLink("Français", ViewContext.RouteData.Values["action"].ToString(), new {language="fr"})

我遇到的问题是我希望保留 {eventid} 路由段,但它不适用于每个 url。

首页索引页http://localhost/MySite/,两个动作链接如下:

English: http://localhost/MySite/
French: http://localhost/MySite/fr

这很好,但在我的内部页面http://localhost/MySite/en/2/Donation 上,操作链接是:

English: http://localhost/MySite/en/2/Donation
French: http://localhost/MySite/fr/Donation

如果我转到http://localhost/MySite/fr/2/Donation,那么操作链接是:

English: http://localhost/MySite/en/Donation
French: http://localhost/MySite/fr/2/Donation

问题是更改语言操作链接不包含 eventid 2 信息。

如何使两个链接都包含事件和语言信息(以及将来无法预见的任何其他路由参数),而无需为它们显式编程?

【问题讨论】:

  • 您的第二条地图路线需要将 en 更改为 fr 以供初学者使用

标签: c# asp.net-mvc asp.net-mvc-4


【解决方案1】:

你最终可能使用的是 Html.RouteLink()

在这种情况下,我会这样称呼它(如果需要多种语言,则更改为数组):

@{
   var enRoute = new RouteValueDictionary(ViewContext.RouteData.Values);
   enRoute["language"] = "en";
   ....
}

(记住新的RouteValueDictionary(),你不想覆盖现有的)

然后:

@Html.RouteLink("English", enRoute)

这有点讨厌,如果不使用视图变量(我不喜欢它)就无法绕过它,但你可以获得链接的整个路径。

【讨论】:

    【解决方案2】:

    使用此方法的内联方式:

    @Html.ActionLink("English", this.ViewContext.RouteData.Values["controller"].ToString(), new RouteValueDictionary(ViewContext.RouteData.Values) {["language"] = "en"})
    

    【讨论】:

      猜你喜欢
      • 2011-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-10
      • 1970-01-01
      • 2016-07-06
      • 2012-05-13
      • 2013-11-17
      相关资源
      最近更新 更多