Я работаю в приложении 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);
}