2009-03-16 28 views
0

私のマスターページには、言語ドロップダウンメニューがあります。ユーザがドロップダウンから言語を選択すると、送信は現在選択されている言語を自分のコントローラの「Translate」メソッドに送信します。その後、翻訳提出前のURLにリダイレクトして、全く同じページを表示できるようになりましたが、新しく選択された言語で表示されます。フォームの投稿に現在のルート値/ URLを入力してください

どうすればこのようなことになるの?どういうわけか隠しフィールドに現在のURLを送信する必要がありますか?または私は多分現在のroutevaluedictionaryを送信することができますので、私のtranslateメソッドは直接redirectToRouteできますか?

もっと良い方法がありますか?

--EDIT--
私は私のブックマークがあまりにもサイトの言語を含めるようにしたいので、私のすべての暴露の行動はあまりにもsiteLanguageパラメータを持っています。私が何らかの形で効率的にsiteLanguageパラメータに適切な値が書き込まれている正規の(GET)リンクをユーザーに表示することができれば、それはさらに優れています。しかし、私が知る限り、javaを除いてドロップダウンにリンクを入れる方法はありません。

答えて

1

私も同様の状況があり、少し違って解決しました。

私のマスターページにの機能があるため、新しいベースコントローラークラス(コントローラーを継承します)を作成し、すべての実際のコントローラーが私のカスタムクラスから継承します。

その後、私はいくつかの一般的な作業を行うために、基本クラスでOnActionExecutingを実装します。

次に、あなたがこのような形を持っている場合は、あなたのマスターページでは、それはGETリクエストで現在のURLに提出すると、クエリ文字列パラメータとして言語を追加します。

<form id="language" method="get" > 
    <select name="language"> 
     <option value="en">English</option> 
     <option value="es">Spanish</option> 
     ... 
    </select> 
</form> 

それを配線するのjQueryを使用して、 autoSubmitまで、など

あなたの基本コントローラクラスにクエリ文字列に言語パラメータを探して、使用する言語を実際のコントローラメソッドを指示するフラグを設定することができます。モデルでは、実際のコントローラに直接アクセスしてページを再生成し、リダイレクトを回避します。あなたは既にクエリ文字列パラメータを使用していない場合

注、これは、普遍的に動作します。

これがあなたのために動作しない場合、また、あなたの現在のメソッドを使用しますが、このような隠しフィールドににリダイレクトされるURLを含めることができます

<%= Html.Hidden("redirect", Request.Url %> 
+0

私はすでにベースのカスタムコントローラを持っていますので、これを確認してください。 –

+0

あなたはアクションを空のままにしておくことができませんでした。素晴らしいもの。 –

0
public ActionResult Translate(string _lang){ 
     switch(_lang){ 
      case "English": 
        return View("English"); 
      case: "French": 
        return View("French"); 
      default: 
        return View("English"); 
} 

私は個人的に私はそれがログインページにリダイレクトする場合、フォーム認証がするよう、クエリ文字列に戻りURLをかけることになり、このよう

+0

が、このビューは何でしょうか? 翻訳する必要がある1ページがありません。大文字と小文字の区別があります。 –

0

それを行うだろう。あなたの翻訳依頼を行う際に

はrouteValues中にreturnurlを含めます。

関連する問題