MVC.NET3に頭を悩ませようとしています。
私は_Layout.cshtml
ベース(構造、ナビゲーション)としてを使用します。レイアウトの一部として、言語/ローカリゼーションの変更に使用される2つのリンクを表示したいと思います。
これらは、どのページが表示されていても表示およびクリック可能である必要があります。ローカリゼーションを変更した後、アクションを呼び出したビューを再ロードしたいと思います。そのため、顧客が見ているページが再ロードされ、新しいローカリゼーションが設定されます。
1つの方法は、各サイトコントローラーでローカリゼーション変更アクションをコピーして貼り付けることですが、より簡単でエレガントな方法はありませんか?
ローカリゼーションの変更を処理する特定のコントローラーを作成しようとしましたが、ビューアーを前のコントローラーに戻す方法がわかりません。
おそらくこれは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"))
...
ダリンからの提案を使用して今すぐ編集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);
}