ASP.NETでのクラスのメンバ変数の保持について - ポストバック時にクラスメンバ変数の値は保持されるのか - ASP.NET

ASP.NETのWebフォームでポストバック時にクラスのメンバ変数の値が保持されるのかを確認します。

UI

以下のUIを準備します。

コード

下記のコードを記述します。

default.aspx.cs

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のクリックイベントハンドラ内でテキストボックスから文字列を取り出し、その値をラベルに表示するとテキストボックスに入力した値をラベルに表示できます。

著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
最終更新日: 2024-01-06
作成日: 2013-05-28
iPentec all rights reserverd.