2

グローバリゼーションとローカリゼーションのマスターページで次のコードを使用できません。コード部分でコメントされているように、「InitializeCultureの定義が含まれていません」というエラーが表示されます。

   protected override void InitializeCulture()
    {
        if (Request["Language"] != null)
        {
            //String selectedLanguage = Request["Language"];
           // code wil go here

        }
        base.InitializeCulture();
       //base.InitializeCulture gives error as mentioned in the next line
       //does not contain a defination for InitializeCulture
    }

このコードをマスターページ以外の他のページに追加すると、正常に機能します。マスターページでこのコードを使用する際の制限はありますか?

マスターページでこのコードを定義できる場合は、すべてのファイルにこのコードを記述する必要はありません。

私は何か間違ったことをしていますか、スレッド化とグローバリゼーションのためのファイルをインクルードしていますが、それでもマスターページでは機能しません

4

1 に答える 1

3

Pageクラスでこれを行う(= InitializeCultureをオーバーライドする)必要があります。マスターページでは機能しません(MasterPageはページからではなくコントロールから派生しています)。Pageから派生した基本クラスを実装し、このクラスからすべてのWebフォームを派生させてから、コードを1回だけ記述することをお勧めします。独自の基本クラスがあると常に便利です。

Visual Studioで、新しいクラスPageBase.csを追加します。

public class FormBase : Page
{
   protected override InitializeCulture()
   {
      if (Request.Form["lbCulture"] != null)
      {
         String selectedLanguage = Request.Form["lbCulture"];
         UICulture = selectedLanguage;
         Culture = selectedLanguage;

         Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(selectedLanguage);
         Thread.CurrentThread.CurrentUICulture = new CultureInfo(selectedLanguage);
      }
      base.InitializeCulture();
   }
}

現在のカルチャは、ドロップダウンリストボックス、セッションに保存されるか、クエリ文字列で渡されます。サンプルではリストボックスを使用しました。

次に、次のようにこのページからWebフォームを派生させます。

public class Default : FormBase // instead of deriving from Page
于 2012-01-02T15:10:44.390 に答える