1

私はローカリゼーションに取り組んでおり、言語を Viewstate に入れてユーザー コントロールにアクセスしたいと考えています。

問題を示すために設定したテスト プロジェクトがあります。ユーザー コントロールには、ラベルが 1 つしかありません。

マスター ページのビューステート (その行がコメント アウトされている場所) にアクセスしないと、すべてが正常に機能し、ラベルが作成されます。

ビューステートから言語を取得するためにビューステートにアクセスすると、オブジェクトが見つからないというエラーが発生し、オブジェクトは null になります。エラーは次のとおりです。

オブジェクト参照がオブジェクト インスタンスに設定されていません。

変数 "culture" は、Viewstate から文字列を取得します。

マスター ページ アクセスの行をコメント アウトすると、"カルチャ" が設定され、すべて正常に動作します。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Globalization;

namespace TestCulture
{
    public partial class Sample : System.Web.UI.Page
    {
        protected override void InitializeCulture()
        {
            string culture;
            culture = "en-US";
            culture = "es-MX";
            culture = ((TestCulture.Site1)Page.Master).zCulture;

            base.InitializeCulture();
            System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo(culture);
            System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo(culture);
        }

        protected void Page_Load(object sender, EventArgs e)
        {
        }

        protected void Page_PreRender(object sender, EventArgs e)
        {
            lblTestLabel.Text = ((TestCulture.Site1)Page.Master).Name;
        }

    }
} 

マスターページは次のとおりです。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace TestCulture
{
    public partial class Site1 : System.Web.UI.MasterPage
    {
        public string zCulture
        {
            get
            {
                if (ViewState["ocCulture"] == null) 
                    ViewState["ocCulture"] = "en-US";
                return (string)ViewState["ocCulture"];
            }
            set { ViewState["ocCulture"] = value; }
        }

        public string Name
        {
            get
            {
                if (ViewState["Name"] == null) 
                    ViewState["Name"] = "Tom";
                return (string)ViewState["Name"];
            }
            set { ViewState["ocCulture"] = value; }
        }

        protected void Page_Load(object sender, EventArgs e)
        {

        }
    }
} 

実際、「InitializeCulture」からマスターページのプロパティにアクセスしても、コントロールは作成されません。

Page_Load および Page_Init イベントから、何の影響もなくプロパティにアクセスできます。

プロパティにアクセスするとコントロールが作成されないのはなぜですか?

ありがとう、

トム

4

1 に答える 1