定位标记帮助程序不会重用当前路线值

时间:2019-01-30 08:58:11

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

当前,我使用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明确指定,是否有一种聪明的方法可以强制它继承当前路由值?

谢谢。

1 个答案:

答案 0 :(得分:0)

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,就可以。