Я пытаюсь обернуть мою голову вокруг MVC.NET 3.Возвращаясь к текущему виду после действий в _Layout.cshtml
я использую _Layout.cshtml
в качестве основы (структура, навигация). В рамках макета я хочу отобразить две ссылки, используемые для изменения языка/локализации.
Они должны отображаться и переключаться независимо от того, какую страницу просматривают, и после изменения локализации Я хочу перезагрузить представление, которое вызвало действие. Таким образом, страница, на которую смотрит клиент, будет перезагружена, с новой установкой локализации.
Один из способов - скопировать и вставить действие, изменяющее локализацию, на каждом из контроллеров сайтов, но нет ли более простого и элегантного способа?
Я попытался создать определенный контроллер, который обрабатывает изменение локализации, но не может понять, как вернуть зрителя на предыдущий контроллер.
Возможно, это проще сделать с помощью jquery?
Это DIV
файл _Layout
с изменениями языка. Он вызывает действие в текущем контроллере, что означает, что я должен определить его в каждом из контроллеров сайта. (Хорошая вещь мнение, что возвращается всегда правильно.)
<div id="top>
@using (Html.BeginForm())
{
<button id="sv_flag" name="localization" title="@Resources.Global.Sv_Flag_Hover" value="sv-SE" />
<button id="en_flag" name="localization" title="@Resources.Global.En_Flag_Hover" value="en-GB" />
}
</div>
Я также попытался с помощью специального контроллера для этого, но не могу думать о том, как я мог бы вернуться к текущему представлению впоследствии? Как так:
@using (Html.BeginForm("LocalizationAction", "LocalizationController"))
...
Edit Теперь, используя предложение от Дарина, я посылаю в значениях controller
и action
со страницы макета:
@using (Html.BeginForm("SetLocalization", "Localization",
new { returnController = @ViewContext.Controller.ValueProvider.GetValue("controller").RawValue,
returnAction = @ViewContext.Controller.ValueProvider.GetValue("action").RawValue }))
...
Но я не могу получить изменение локализации для работы , действие моего контроллера выглядит так:
public ActionResult SetLocalization(string localization, string returnController, string returnAction)
{
Thread.CurrentThread.CurrentCulture = Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(localization);
return RedirectToAction(returnAction, returnController);
}
У меня была очень похожая проблема несколько недель назад. Базовым контроллером был маршрут, который я взял. Очень удобно для всех видов мусора. – ledgeJumper