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 是从 Control 派生的,而不是从 page 派生的)。我建议您实现一个派生自 Page 的基类,并从该类派生每个 Web 表单,然后您还必须只编写一次代码。拥有自己的基类总是很方便的。

在 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();
   }
}

当前文化要么存储在某个下拉列表框中,要么存储在会话中,要么通过查询字符串传递。我在示例中使用了一个列表框。

然后你从这个页面派生出你的 WebForm,如下所示:

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