C# 更改ActionLink中的单个路由参数

C# 更改ActionLink中的单个路由参数,c#,asp.net-mvc,asp.net-mvc-4,C#,Asp.net Mvc,Asp.net Mvc 4,我正在尝试实现一个在所有页面上都可见的语言选择器 我的应用程序目前有两条路线: routes.MapRoute( name: "EventDriven", url: "{language}/{eventid}/{controller}/{action}/{id}", defaults: new { language = "en", controller = "Home", action = "Index", id = UrlParameter.Optional } );

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

我的应用程序目前有两条路线:

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 }
);
在我的共享
\u 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
English: http://localhost/MySite/en/Donation
French: http://localhost/MySite/fr/2/Donation
如果我转到
http://localhost/MySite/fr/2/Donation
那么操作链接是:

English: http://localhost/MySite/en/2/Donation
French: http://localhost/MySite/fr/Donation
English: http://localhost/MySite/en/Donation
French: http://localhost/MySite/fr/2/Donation
问题在于更改语言操作链接不包含eventid
2
信息


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

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

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

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

然后:

@Html.RouteLink("English", enRoute)

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

使用此方法的内联方式:

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

首先,您的第二条地图路线需要从en改为fr