【问题标题】:Anchor tag helpers do not reuse the current route values锚标记助手不重用当前路由值
【发布时间】:2019-01-30 08:58:11
【问题描述】:

目前我正在使用 ASP.NET Core 2.2 MVC 来构建我的应用程序,具有传统的模板路线:

routes.MapRoute(
    name: "default",
    template: "{culture:required}/{area:slugify:exists}/{controller:slugify}/{action:slugify}",
    defaults: new
    {
        area = "Home",
        controller = "Home",
        action = "Index"
    });

/Areas/Home/Views/Home/Index.cshtml 中,我尝试编写以下内容并期望会生成类似“http://localhost/en-US/Home/Home/AboutUs”的内容,但它不起作用:

<a 
   asp-area="Home" 
   asp-controller="Home" 
   asp-action="AboutUs">
    About Us
</a>

相反,明确指定文化是有效的:

<a asp-area="Home" 
   asp-controller="Home" 
   asp-action="AboutUs" 
   asp-route-culture="en-US">
    About Us
</a>

但是,由于我的网站包含大量链接,我不想用CultureInfo.CurrentCulture.Name 污染所有标签。如果asp-route-culture 未明确指定,是否有一种智能方法可以强制它继承当前路由值?

提前谢谢你。

【问题讨论】:

    标签: asp.net-core asp.net-core-mvc asp.net-core-2.2 asp.net-core-routing


    【解决方案1】:
    routes.MapRoute(
        name: "us_english_products",
        template: "en-US/Products/{id?}",
        defaults: new { controller = "Products", action = "Details" },
        dataTokens: new { locale = "en-US" });
    

    我想你正在寻找这个。它位于

    下的文档中

    https://docs.microsoft.com/en-us/aspnet/core/fundamentals/routing?view=aspnetcore-2.2#differences-from-earlier-versions-of-routing

    因此,您不必对每个链接上的路线进行硬编码,但您可以设置路线以便将其考虑在内。看来你可以随意命名locale,所以如果你想命名culture,你可以。

    【讨论】:

    • 这是否意味着如果我的应用程序有 3 个语言环境,我必须为每个语言环境注册每条路线 3 次?
    • 使用你的方法,我需要将所有语言环境硬编码到 startup.cs,我实际上可以在运行时添加语言环境
    • 虽然它是 1.1.0,但它可能会有所帮助,支持 2.2 的文档几乎相同 andrewlock.net/…。最终是的,您最终必须为您将支持的语言进行硬编码。
    猜你喜欢
    • 2016-06-04
    • 2016-05-22
    • 2021-10-26
    • 1970-01-01
    • 2021-09-04
    • 2019-03-27
    • 1970-01-01
    • 2019-08-01
    • 1970-01-01
    相关资源
    最近更新 更多