2011-08-01 18 views
1

イメージボタンの1つをクリックして言語を変更することができます。 私はHiddenfieldを使用して、ユーザーによって選択された言語のコードを保存しました(Imagebuttonクリックイベントで)。 マイInitializeCulture方法は、次のようになります。これは正常に動作しますイメージボタンを使用して多言語ウェブサイトの言語を変更するために2回のポストバックが必要

 protected override void InitializeCulture() 
    { 
    string culture = "Auto"; 
    string selectedValue = Request.Form["ctl00$HiddenFieldLang"]; 
    switch (selectedValue) 
    { 
     case "1": culture = "Auto"; 
      break; 
     case "2": culture = "zh-HK"; 
      break; 
     default: break; 
    } 

    if (culture != "Auto") 
    { 
     System.Globalization.CultureInfo ci = new System.Globalization.CultureInfo(culture); 
     //ci = System.Globalization.CultureInfo.CreateSpecificCulture(culture); 
     System.Threading.Thread.CurrentThread.CurrentCulture = ci; 
     System.Threading.Thread.CurrentThread.CurrentUICulture = ci; 
    } 
    base.InitializeCulture(); 
    } 

。しかし、ページの言語を変更するには2回のポストバックが必要です。私は1つのポストバック(何も変わらない)で、hiddenfieldの値が設定されていると推測しています。 2回目のポストバックでは、実際の翻訳が行われます。

イメージボタンを1回クリックするだけでページが翻訳されるようにするにはどうすれば実装できますか?

ありがとうございます!

+0

ImageButtonを通常のボタンに変更して、2回のクリックが必要かどうかを確認します。特定のシナリオでImageButtonとポストバックに問題があることを覚えているようです。通常のボタンで問題が解決した場合は、通常のボタンを使用してその背景を画像に設定します。 – TheGeekYouNeed

+0

私が理解しているように、KhushbooはFormコレクションを使用しているので、InitCultureが呼び出されたときにコントロールのコントロールが初期化されないため、どのコントロールが使用されているかは問題になりませんか? –

答えて

0

ありがとうございます。 私はthisリンクの助けを借りてこの問題を解決することができました。

しかし、もう別の問題があります。 私はmasterpageを持っています。私は、私のmasterpageにhiddenfieldの値を設定するためにHiddenfieldとJavascript関数を入れました。私のすべてのページのURLには、言語IDを持つクエリ文字列があります。したがって、言語が変わるたびに、クエリーストリングも変更したいと思います。

現在のコンテンツページのURLをmasterpageから取得し、SetHiddenValue(val)関数自体からResponse.RedirectまたはServer.Transferを実行してテキストが確実に変換されるようにする方法はありますか?

+0

javascriptのwindow.locationを新しい言語パラメータで変更し、このパラメータをInitializeCultureメソッドで処理することができます。この方法では、選択した言語に追加の隠しフィールドは必要ありません。 –

+0

言語パラメータでは、InitializeCultureのクエリ文字列値を使用することを意味しますか?私はすでにそれを試みましたが、明らかにInitializeCulture()メソッドはクエリ文字列を認識しません。なぜなら、おそらくWebページのライフサイクルの初期に実行されるからです。私が間違っているなら、私を修正してください。 – KhD

+0

もう一度お試しください。 Request.QueryStringは、ページのライフサイクルの任意の期間にアクセス可能でなければなりません。 –

0

imagebuttonのclickイベントのクライアント側ハンドラを追加し、その上のHiddenFieldLangに値を設定することができます。 または、InitializeCultureメソッドでポストバックを引き起こしたコントロールを取得し、言語を切り替えるために使用されるボタンの1つが適切なカルチャを適用する場合は、コントロールを取得できます。

いつもポストバックを引き起こすコントロールをチェックする必要がないので、私の意見では最初のオプションが優先されます。

0

私はASP.NETで多言語サイトを実装していましたが、一度問題がありました... Questionで必要なコードを見つけることができます。ここでは、HiddenFieldコントロールではなくImageコントロールを見つけなければならないと思います。

関連する問題