Свойство, обновленное в базовом контроллере, не обновлено в домашнем контроллере (производный класс) - PullRequest
0 голосов
/ 04 марта 2019

Я работаю в приложении ASP.NET MVC (с Kentico Cloud) и хочу расширить его для поддержки двух языков.Я хочу сохранить выбор языка в куки.Я создал базовый контроллер, который содержит метод, который получает cookie.

Работа с облаком Kentico Мне нужно передавать код текущего языка всякий раз, когда я хочу отобразить какой-либо контент на странице, это означает, что мне нужно прочитать то же самоепеченье несколько раз.

Моя идея состояла в том, чтобы сохранить cookie в свойстве базового класса.Когда язык переключается, cookie и свойство обновляются, поэтому значение всегда актуально.Когда бы ни понадобился файл cookie, я просто читал бы его свойство, а не получал его снова и снова.

Это сделано для того, чтобы решение было проще для работы и немного более читабельным.

Проблема, с которой я сталкиваюсь, заключается в том, что когда я переключаю язык, cookie и свойство обновляются в базовом контроллере, однако когда я затем вызываю действие Index для контроллера, значение свойства не обновляется.

У меня вопрос почему?Где ошибка в моем мышлении?Код выглядит так:

public class BaseController : Controller
{
public string CurrentLanguage { get; set; }

public void UpdateLocalizationCookie(string languageCode)
{
    var cookie = Request.Cookies["current_language"];
    if (cookie != null)
    {
        cookie.Value = languageCode;
    }
    else
    {
        var newCookie = new HttpCookie("current_language", languageCode);
        Response.AppendCookie(newCookie);
    }

    System.Threading.Thread.CurrentThread.CurrentCulture =
        new System.Globalization.CultureInfo(languageCode);
    System.Threading.Thread.CurrentThread.CurrentUICulture =
        new System.Globalization.CultureInfo(languageCode);

    CurrentLanguage = languageCode;
}
public void ReadLocalizationCookie(System.Web.Routing.RequestContext requestContext)
{
    if (requestContext.HttpContext.Request != null)
    {
        var cookie = requestContext.HttpContext.Request.Cookies["current_language"];
        if (cookie != null)
        {
            CurrentLanguage = cookie.Value;
            return;
        }
    }

    // Return default language code
    CurrentLanguage = "nl-NL";
}
}

HomeController.cs

public class HomeController : BaseController
{
protected override void Initialize(System.Web.Routing.RequestContext requestContext)
{
    ReadLocalizationCookie(requestContext);
    base.Initialize(requestContext);
}
public ActionResult ChangeLanguage(string language)
{
    UpdateLocalizationCookie(language);

    return Redirect(Request.UrlReferrer.ToString());
}
public async Task<ActionResult> Index()
{
    HomePageModel viewModel = await _homeRepository.GetHomepage(CurrentLanguage);
    viewModel.LatestNewsPanel.NewsItems = await _newsRepository.GetAllNews(CurrentLanguage);
    SetMetadata(viewModel.Metadata);
    ViewBag.Menu = Resources.Menu.Home;

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