私はローカリゼーションに取り組んでおり、言語を 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 イベントから、何の影響もなくプロパティにアクセスできます。
プロパティにアクセスするとコントロールが作成されないのはなぜですか?
ありがとう、
トム