c# - 生成替换一个参数的路由

标签 c# asp.net-mvc .net-core url-routing asp.net-mvc-routing

我创建了一个网站,其中本地化是通过我的 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 时会自动重用它们,但这不适用于 controlleraction .

关于c# - 生成替换一个参数的路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48580159/

相关文章:

c# - 尝试在 formview 中绑定(bind)下拉列表时出现空引用异常

javascript - 我在 mvc、LoadBooks、RequirementBooks 中有 2 个 View

asp.net-mvc - 我正在尝试下面给定的代码,但它显示错误 CS0051

visual-studio-code - 如何使Visual Studio Code自动加载所需的 Assets

c# - VS 2017 .NET 核心二进制格式化程序

c# - dotnet core System.Text.Json 转义 unicode 字符串

c# - 禁用用户输入,直到 thread.sleep 完成

c# - LINQ 查询(分组依据)?

c# - 在 MVC 4 网站上持续运行后台进程

c# - 我在 ASP.NET Core Web API 应用程序上配置 CORS 时遇到 CORS 错误