我创建了一个网站,其中本地化是通过我的 route 的第一个参数完成的。因此,每个 URL 看起来都像 /{lang}/...
,其中 lang 为 nl, en, fr, ...
。
在我的标题中,我想添加一个语言选择器,以所选语言重定向到当前页面。我使用了下面的代码,它运行得很好。
<a asp-route-lang="@lang.Code.ToString()">
@lang.Name
</a>
但是,当当前路由包含其他路由参数时,这些对于生成的 URL 来说都消失了。有没有办法告诉路由生成器保留新 URL 的所有其他现有路由参数?
我有不同的路由定义和不同的参数,因此无法手动将它们添加到生成的 URL 中。
最佳答案
在构建基于路由的 URL 时,至少需要指定 Controller
和操作
。由于对于这种特殊情况(选择区域性),它们可能会根据 URL 发生变化,因此您需要从当前请求中提取这些值。
@{
var routeValues = this.ViewContext.RouteData.Values;
var controller = routeValues["controller"] as string;
var action = routeValues["action"] as string;
}
<ul>
<li><a asp-controller="@controller" asp-action="@action" asp-route-lang="en">English</a></li>
<li><a asp-controller="@controller" asp-action="@action" asp-route-lang="es">Español</a></li>
</ul>
所有其他路由值都是从当前请求继承的,因此在生成 URL 时会自动重用它们,但这不适用于 controller
和 action
.
关于c# - 生成替换一个参数的路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48580159/