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
问题在于更改语言操作链接不包含eventid2
信息
如何使这两个链接都包含事件和语言信息(以及将来不可预见的任何其他路由参数),而不必为它们显式编程?您可能最终使用的是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