ASP.NET MVC генерирует URL с другим параметром культуры с помощью ActionLink - PullRequest
0 голосов
/ 05 ноября 2018

У меня есть несколько шаблонов URL, как показано ниже:

{lang}/package/{packageID}
{lang}/package/{packageID}/Edit/{partNumber}
...

В layout.cshtml есть нижний колонтитул, нижний колонтитул предоставляет пользователям ссылки на различные культуры для изменения языка веб-сайта. Когда пользователь нажимает на ссылку, я надеюсь, что он может изменить язык и остаться на текущей странице, поэтому я отображаю ссылку Razor следующим образом:

@Html.ActionLink("English", ViewContext.RouteData.Values["Action"], ViewContext.RouteData.Values["Controller"], new { lang = "en-us"}, null)
@Html.ActionLink("Traditional Chinese", ViewContext.RouteData.Values["Action"], ViewContext.RouteData.Values["Controller"], new { lang = "zh-tw"}, null)
@Html.ActionLink("Japanese", ViewContext.RouteData.Values["Action"], ViewContext.RouteData.Values["Controller"], new { lang = "ja-jp"}, null)
...

Но есть проблема в том, что мне нужно передать на страницу другие параметры, которые я упомянул выше, чтобы пользователи оставались на текущей странице.

Как мне достичь этого сценария?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 05 ноября 2018

Вы можете создать метод расширения в качестве помощника для создания языковых ссылок:

public static class LanguageExtensions
{
    public static RouteValueDictionary ForLang(this RouteValueDictionary dict, string lang)
    {
        var cloned = new RouteValueDictionary(dict);
        cloned["lang"] = lang;
        return cloned;
    }
}

Теперь вы можете использовать его следующим образом:

@Html.ActionLink("English", ViewContext.RouteData.Values["Action"], ViewContext.RouteData.Values["Controller"], ViewContext.RouteData.ForLang("en-us"), null)
0 голосов
/ 05 ноября 2018

Вы можете использовать return Redirect(HttpContext.Request.UrlReferrer.ToString());, чтобы вернуться, чтобы вернуть пользователей на страницу, на которой они находились, и не беспокоиться о повторной передаче параметров.

Поток будет:

  1. Пользователь нажимает на ссылку типа @Html.ActionLink("English", ViewContext.RouteData.Values["Action"], ViewContext.RouteData.Values["Controller"], new { lang = "en-us"}, null)

  2. Вы меняете язык в методе действия контроллера

  3. Верните пользователя на страницу, на которой он находился, вызвав return Redirect(HttpContext.Request.UrlReferrer.ToString()); из того же метода действия
...