ASP.NETのWebフォームでポストバック時にクラスのメンバ変数の値が保持されるのかを確認します。
以下のUIを準備します。
下記のコードを記述します。
namespace ClassMemberVariables
{
public partial class _default : System.Web.UI.Page
{
public string TextData;
protected void Page_Load(object sender, EventArgs e)
{
Label1.Text = TextData;
}
protected void Button1_Click(object sender, EventArgs e)
{
TextData = TextBox1.Text;
}
}
}
ページのロード時にLabel1にTextData変数の内容を表示します。また、Buttonクリック時にTextDataにTextBoxの値を代入します。
プロジェクトを実行します。下図の画面が表示されます。
テキストボックスに文字を入力します。入力ができたら[Button]をクリックします。
ページが切り替わりますが、Labelには何も表示されません。テキストボックスに入力された値は保持されています。
Webフォームのクラスのメンバ変数はページが読み込まれた際に初期化されてしまうことが確認できました。一方テキストボックスに入力した内容はViewStateに保存されるため値が保持される動作になっています。
コードを下記に変更します。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace ClassMemberVariables
{
public partial class _default : System.Web.UI.Page
{
public string TextData;
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
TextData = TextBox1.Text;
Label1.Text = TextData;
}
}
}
Button1がクリックされたイベント内でTextBoxから値を読み出し、Labelにテキストを設定します。
プロジェクトを実行します。下図の画面が表示されます。
テキストボックスに文字を入力します。入力後[Button]をクリックします。
Labelにテキストボックスに入力した文字列が表示されました。
Webフォームのクラスのメンバ変数はページが読み込まれた際に初期化されてしまいますが、テキストボックスに入力された値はViewStateで保持されているため、Buttonのクリックイベントハンドラ内でテキストボックスから文字列を取り出し、その値をラベルに表示するとテキストボックスに入力した値をラベルに表示できます。