Помощники тегов привязки не используют текущие значения маршрута - PullRequest
0 голосов
/ 30 января 2019

В настоящее время я использую 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 голосов
/ 31 января 2019
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, вы можете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...