MVC视图(CSHTML)中替换URL语言标识的正确方法
CSHTML视图中替换URL语言代码的正确方法
精准字符串替换法
直接针对当前请求路径做精准替换,避免误匹配其他包含目标语言代码的路径片段:
<a href="@Request.Path.ToString().Replace($"/{currentlanguage.code}/", $"/{item.code}/")">切换到希腊语</a>
这里用Request.Path获取当前路径部分(比如/en/Dashboard),通过给语言代码前后加斜杠的方式替换,能有效避免误改类似/enroll这类包含en的无关路径。
路由生成法(推荐)
利用ASP.NET的路由机制生成规范URL,比手动字符串替换更健壮,还能自动适配路由规则:
假设Dashboard页面对应HomeController的Dashboard动作,写法如下:
<a href="@Url.Action("Dashboard", "Home", new { culture = item.code })">切换到希腊语</a>
需要确保路由配置包含culture参数,示例路由配置:
routes.MapRoute( name: "Localized", url: "{culture}/{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }, constraints: new { culture = @"[a-z]{2}" } );
原始代码修正版
如果要沿用你提供的代码结构,先修正变量名拼写(currentlangugage多了一个u,应为currentlanguage),同时可以优化替换规则提升精准度:
<a href="@Url.Path.Replace($"/{currentlanguage.code}", $"/{item.code}")">切换到希腊语</a>
⚠️ 注意:这种方式会替换路径中所有匹配/en的片段,若存在重复匹配场景会出错,不如第一种方法可靠。
内容的提问来源于stack exchange,提问作者ruhatozcan
相关产品推荐
相关产品推荐

