ASP.NET Webフォーム 組み込みオブジェクト

組み込みオブジェクト

概要

ASP.NET WebフォームはPageクラスを継承している為、全てのページでPageクラスのプロパティを使用可能。
ASP.NET Webフォームでは、Pageクラスプロパティの戻り値を組み込みオブジェクトと呼ぶ。

Application

※サーバー側に保持される変数。
サーバーのメモリがクリアされるまでは誰がアクセスしても同じ値を維持する。
戻り値:HttpApplicationState
アプリケーション共通情報取得プロパティ
protected void Page_Load(object sender, EventArgs e)
{

  //他のセッションからApplication変数を変更できない様にロックする
  //(サーバーにアクセスしている別ユーザーも変更できてしまう為)
  Page.Application.Lock();
  
  Page.Application["test"] = "test";
  
  //ロックを解除
  Page.Application.UnLock();
  
  Page.Response.Write(s: Page.Application["test"].ToString());
  //⇒index.aspxには「test」と表示される
}

Session

※サーバー側に保持される変数。
セッションが切れる(ブラウザを閉じる)と初期化される。
セッションが切れなければページを遷移してもその値はサーバーに残る。
戻り値:HttpSessionState
※index.aspx.cs
public partial class index : System.Web.UI.Page
{
  protected void Page_Load(object sender, EventArgs e)
  {
    Page.Session["test"] = "aaaa";
  }
}
※next.aspx.cs
public partial class next : System.Web.UI.Page
{
  protected void Page_Load(object sender, EventArgs e)
  {
    Page.Response.Write(s: Page.Session["test"].ToString());
  }
}
⇒index.aspxを表示した後、何もしなくてもnext.aspxを表示すると、
aaaa
と表示される。
//セッション変数削除
Page.Session.Remove(name: "test");
//全てのセッション変数削除
Page.Session.RemoveAll();
//セッションを削除
Page.Session.Abandon();
構成ファイルでの共通設定の方法は「ASP.NET 構成ファイル(Web.config/Machine.config)/<sessionState>要素:セッション情報設定」参照

Request

戻り値:HttpRequest
クライアントからのリクエスト情報取得プロパティ
ASP.NET Webフォーム Requestオブジェクト

Response

戻り値:HttpResponse
クライアントへのレスポンス操作
ASP.NET Webフォーム Responseオブジェクト

Cache

戻り値:Cache
キャッシュ管理
ASP.NET Webフォーム キャッシュ

Server

戻り値:HttpServerUtility
サーバー情報取得プロパティ

Trace

戻り値:TraceContext
トレース操作
ASP.NET Webフォーム Traceオブジェクト

User

戻り値:IPrincipal
ログインユーザー情報取得プロパティ

ViewState

※ページロードにより初期化されない変数(保存場所:クライアント側)
戻り値:StateBag

自動割り当て

ラベル等View(見た目)のState(状態)を管理する為に自動的に割り当てられるコントロール
またサーバー側にテキスト変更イベントを定義した場合には、テキストボックスの値も割り当てられる。
(ポストバック時に、テキスト変更イベントで変更前後の値をチェックする為)。
↓の様な隠しコントロールが自動的に作成され値が保持される。
<input
 type="hidden"
 name="__VIEWSTATE"
 id="__VIEWSTATE"
 value="XXXXXXXXXXXX~(以下略)" />
データベースの値を表示する様なコントロールの場合
パラメーターに変更がなければGridを書き換える必要はないので、以下を設定することが望ましい。
デフォルト:Inherit(親コントロールの設定を継承)
<asp:GridView
  ID="myGrid"
  runat="server"
  ~
  ViewStateMode="Disabled">
</asp:GridView>
ページ全体で設定する場合
デフォルト:Enabled(有効)
<%@ Page
  ViewStateMode="Disabled"
  Language="~"
  AutoEventWireup="~"
  CodeBehind="~"
  Inherits="~" %>

明示的な使用法

クラスはページロードによって再インスタンス化される為に値が初期化される。
ViewState変数はページロードされても値が保持される。
public partial class index : System.Web.UI.Page
{
  protected void Page_Load(object sender, EventArgs e)
  {
    //初期化
    if (!Page.IsPostBack)
    { ViewState["count"] = 0; }
  }

  protected void myButton_Click(object sender, EventArgs e)
  {
    //ViewState["count"]には前回ボタンクリック時の値が入っているので更に加算される。
    ViewState["count"] = (int)ViewState["count"] + 1;
  }
}

<form id="myForm" runat="server">
  <%=ViewState["count"] %>
  ⇒ 0,1,2,3,4・・・
  <br />
  <asp:Button ID="myButton" runat="server" Text="Button" OnClick="myButton_Click" />
</form>

※全ビューステートの破棄
ViewState.Clear();