我正在尝试围绕 MVC.NET 3。
我使用 a_Layout.cshtml
作为基础(结构,导航)。作为布局的一部分,我想显示两个用于更改语言/本地化的链接。
无论查看哪个页面,这些都应该显示并可点击,并且在更改本地化后我想重新加载调用 action 的视图。因此,客户正在查看的页面将被重新加载,并设置新的本地化设置。
一种方法是在每个站点控制器中复制和粘贴更改本地化的操作,但没有更简单、更优雅的方法吗?
我尝试创建一个处理本地化更改的特定控制器,但无法弄清楚如何将查看器返回到前一个控制器。
也许这用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"))
...
编辑
现在使用 Darin 的建议,我从布局页面发送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);
}