DropDownList ポストバックに奇妙な問題があります。
asp.net マスター ページに DropDownList があり、次のような状態名が含まれています。
- テキスト [ニューヨーク] - 値 [0]
- テキスト [ニュージャージー] - 値 [1]
drpTowns.DataSource = objTown.GetAllStates();
drpTowns.DataTextField = "Name";
drpTowns.DataValueField = "Id";
drpTowns.DataBind();
マスター ページのコード ビハインドには、DropDownList_SelectedIndexChanged イベントがあり、セッションを保持している変数にドロップダウン リストの SelectedValue を設定しています。以下のように
protected void drpTowns_SelectedIndexChanged(object sender, EventArgs e)
{
Globals.DefaultTown = Convert.ToInt32(drpTowns.SelectedValue);
}
Globals.DefaultTown の定義は、以下のように App_Code Globals.cs クラスに記述されます。
private static int _defaultTown = Convert.ToInt32(ConfigurationManager.AppSettings["DefaultTown"]);
public static int DefaultTown
{
get
{
if (HttpContext.Current.Session["DefaultTown"] == null)
return _defaultTown;
else
return Convert.ToInt32(HttpContext.Current.Session["DefaultTown"]);
}
set
{
HttpContext.Current.Session["DefaultTown"] = value;
}
}
ここで、コンテンツ ページ (Default.aspx) の Globals.DefaultTown の値を取得したいと考えています。私は以下のようにしています:
Response.Write("Default Town Is: " + Globals.DefaultTown + "<br />");
ドロップダウンリストから州を選択するたびに、Globals.DefaultTown はすぐに更新されません。デフォルトでは、Selected State が DefaultTown に設定されていますが、リストから 2 番目の州を選択すると、最初の州の ID が表示されます。リストから 3 番目の州を選択すると、2 番目の州の ID が返され、リストから最初の州を選択すると、3 番目の州の ID が返されます。つまり、その場で DefaultTown 変数を更新しません。
誰でもこれで何がうまくいかないのか教えてもらえますか