Application

HttpApplicationState = Page.Application

 
 

ASP 組み込みオブジェクトの Application に相当する HttpApplicationState クラスのインスタンスを返します。HttpApplicationState クラスのインスタンスには、ASP.NET アプリケーション内の複数のセッションや要求で共有できるグローバル情報が含まれています。HttpApplicationState クラスおよびそのメンバーの詳細については、第 13 章を参照してください。

 
パラメータ
 
  • HttpApplicationState
      HttpApplicationState クラスのインスタンスを受け取る HttpApplicationState 型の変数です。
 

次のコード例では、Page オブジェクトの Application プロパティを使用して Application オブジェクトに「名前/値」のペアを追加し、ラベルコントロールにその値を表示します。Page オブジェクトのすべてのプロパティは、そのページに関連付けられているすべてのコードに直接公開されます。したがって、Application プロパティにアクセスするために Page クラスを Page.Application のように明示的に指定する必要はありません。

 
Sub Page_Load(  )
   Application("Name") = "John Doe"
   Message.Text = "The value <em>" & CStr(Application("Name")) & _
      "</em> has been added to the Application collection."
End Sub
 
メモ

HttpApplicationState インスタンスへのローカルオブジェクト参照を取得してアプリケーションで使用することもできますが、このプロパティの使用法としては、前述の例のように Application プロパティから直接アクセスする方法が一般的です。

 
Cache

Cache = Page.Cache

 
 

アプリケーションドメインのキャッシュを表す Cache クラスのインスタンスを返します。Cache プロパティを使用して、キャッシュにデータを追加したり、キャッシュからデータを取得することができます。

 
パラメータ
 
  • Cache
      Cache インスタンスを受け取る Cache 型の変数です。
 

次のコード例では、Page クラスの Cache プロパティを使用して Cache オブジェクトに「名前/値」のペアを 2 組追加し、Page オブジェクトの Cache プロパティを使用してこれらの値をラベルコントロールに表示します。

 
Sub Page_Load(o As Object, e As EventArgs)
   Cache("Name") = "John Doe"
   Cache("Age") = 42
   Message.Text = CStr(Cache.Item("Name")) & " is " & _
      CStr(Cache("Age")) & " years old."
End Sub
 
メモ

Application オブジェクトと同様、Cache オブジェクトへは、アプリケーションで使用する Cache インスタンスへのローカルオブジェクト参照を取得してアクセスするよりも、Cache プロパティから直接アクセスする方法が一般的です。

 

第 13 章では、Application 状態コレクションよりも ASP.NET Cache を使用する方が適している場合、またその逆の場合について説明しています。

 

Cache クラスのメンバーは、次のとおりです。

 
Cache メンバー説明
Add メソッド キャッシュに項目を追加します。
Count プロパティ キャッシュに保持されている項目の数を示します。
Get メソッド 特定のキー値が割り当てられているキャッシュ内のデータを表すオブジェクトを返します。
Insert メソッド キャッシュに任意の項目を挿入し、これにキーを割り当てます。
Item プロパティ キー値に基づいてキャッシュ項目を表すオブジェクトを返します。または、キャッシュのデータ項目を設定し、これにキー値を割り当てます。
Remove メソッド キャッシュから特定のキー値が割り当てられている項目を削除します。
 
ClientTarget

String = Page.ClientTarget

 
 

ASP.NET でのブラウザの自動検出機能をオーバーライドし、"machine.config" または "web.config" で設定されている種類のブラウザにページを強制的に表示させる文字列値を取得または設定します。ClientTarget プロパティに設定済みの値は次のとおりです。

 
 
  • downlevel
      "machine.config" の <browserCaps> 要素で定義されている不明なブラウザ用のブラウザ機能に基づいてページを表示します。
  • ie4
      "machine.config" の <browserCaps> 要素で設定されている Internet Explorer 4.0 用の値に基づいてページを表示します。
  • ie5
      "machine.config" の <browserCaps> 要素で設定されている Internet Explorer 5.0 用の値に基づいてページを表示します。
 
パラメータ
 
  • String
      ページの表示に使用するブラウザ機能のエイリアスを表す文字列です。
 

次のコード例では、Page クラスの ClientTarget プロパティを downlevel 値で初期化し、ASP.NET により不明な種類のブラウザでページを強制的に表示するようにします。この結果、HTML 3.2 互換の出力となります。次に、このコード例では、一連の機能がサポートされているかどうかを示すメッセージが表示されます。downlevel の場合、列挙されている機能はいずれもサポートされません。

 
Sub Page_Load(  )
   Page.ClientTarget = "downlevel"
      Message.Text = "Page is set to render for the " & _
   Page.ClientTarget & " alias.<br/>"
   Message.Text &= "Supported features:<br/>"
   Message.Text &= " - JavaScript: " & _
      Request.Browser.JavaScript & "<br/>"
   Message.Text &= " - ActiveX Controls: " & _
      Request.Browser.ActiveXControls & "<br/>"
   Message.Text &= " - Frames: " & _
      Request.Browser.Frames & "<br/>"
End Sub
 
メモ

ClientTarget は、@ Page ディレクティブの ClientTarget 属性を使用して指定することもできます。

 

この例の ClientTarget プロパティの値を ie4 に変更すると、列挙されているすべての機能がサポートされることを示すメッセージが表示されます。

 

大半のサーバーコントロールでは、すべてのブラウザに対して HTML 3.2 用の表示を生成しますが、検証コントロールなどのコントロールは ClientTarget の値に応じて異なる表示を生成します。ClientTarget プロパティが downlevel に設定されている場合は、検証はサーバーサイドで実行されます。したがって、ソースを表示する場合、クライアントサイドのスクリプトは検証に使用されません。

 

ClientTarget が uplevel に設定されている場合は、検証コントロールによりクライアントサイド JavaScript が生成され、クライアントサイドで検証が実行されます。

 
Context

HttpContext = Page.Context

 
 

現在の HTTP 要求のコンテキスト情報を保持している HttpContext インスタンスを返します。

 
パラメータ
 
  • HttpContext
      現在の HttpContext インスタンスへの参照を受け取る HttpContext 型の変数です。
 

次のコード例では、Context プロパティを使用して、現在ログインしているユーザーの名前を返します。この情報は、Page クラスの User プロパティを使用して取得することもできます。User プロパティは、現在の要求に関連付けられている HttpContext から派生します。

 
Sub Page_Load(  )
   Message.Text = "Currently logged in as: " & _
      Context.User.Identity.Name
End Sub
 
メモ

このプロパティは、通常、ASP.NET 組み込みオブジェクト (Request や Response など) にアクセスする必要があるビジネスオブジェクトに対して、現在の要求に関する HttpContext への参照を渡すために使用されます。Application、Request、Response、Server、Session の各組み込みオブジェクトのほかに、HttpContext クラスを使用して、現在の HTTP 要求の Trace および User 情報にアクセスすることもできます。

 
EnableViewState

Boolean = Page.EnableViewState
Page.EnableViewState = Boolean

 
 

ページの表示状態およびページに実装されているサーバーコントロールの表示状態をページが保持するかどうかを示すブール値を返すか、または設定します。このプロパティの初期設定値は True です。この場合、ページはその表示状態を保持します。

 
パラメータ
 
  • Boolean
      ページがその表示状態を保持するかどうかを示すブール値です。
 

次のコード例では、@ Page ディレクティブの EnableViewState 属性を使用して EnableViewState を False に設定し、その値をページに表示します。

 
<%@ Page Language="vb" EnableViewState="True" %>
<html>
   <head>
      <title></title>
      <script runat="server">
         Sub Page_Load(  )
            If Page.EnableViewState = True Then
               Message.Text = "ViewState is enabled."
            Else
               Message.Text = "ViewState is disabled."
            End If
         End Sub
      </script>
   </head>
<body>
   <form runat="server">
      <asp:label id="Message" runat="server"/>
   </form>
</body>
</html>
 
メモ

前述の例にあるように、EnableViewState プロパティは、@ Page ディレクティブの EnableViewState 属性を使用して指定することもできます。

 

ブラウザのソース表示機能を使用してページの HTML ソースを参照することで、EnableViewState プロパティによる効果を確認することができます。EnableViewState プロパティが False に設定されている場合、ソースは次のようになります。

 
<input type="hidden" name="_  _VIEWSTATE"
       value="dDwxMDA3MzE2MzEyOzs+" />
 

EnableViewState プロパティが True に設定されている場合、ソースは次のようになります。

 
<input type="hidden" name="_  _VIEWSTATE"
value="dDwxMDA3MzE2MzEyO3Q8O2w8aTwxPjs+O2w8dDw7bDxpPDM+Oz47bDx0PHA8cDxsPF
RleHQ7PjtsPFZhbHVlIG9mIHRoZSBFbmFibGVWaWV3U3RhdGUgcHJvcGVydHkgaXMgVHJ1ZTs
+Pjs+Ozs+Oz4+Oz4+Oz4=" />
 

_ _VIEWSTATE 非表示フィールドの値に追加されている文字は、現在のページの表示状態を示しています。ページの表示状態には、BackColor や ForeColor などのサーバーコントロールの一時プロパティが含まれます。

 

runat="server" 属性を含む <form> 要素がページに設定されていない場合は、EnableViewState プロパティの値にかかわらず、表示状態は保持されません。

 
ErrorPage

String = Page.ErrorPage
Page.ErrorPage = String

 
 

ページ未処理の例外が発生した場合のリダイレクト先となるページの名前を返すか、または設定します。

 
パラメータ
 
  • String
      ページ未処理の例外が発生した場合のリダイレクト先となるページの名前を示す文字列値です。
 

次の例では、ErrorPage プロパティを変更し、ページ未処理の例外が発生したときに実行されたページを表示します。

 
Sub Page_Load(  )
   Page.ErrorPage = "ErrorPage_Handler.aspx"
   Dim x, y, overflow As Integer
   x = 1
   y = 0
   overflow = x/y
   'This code will not be executed
   Message.Text = "Error Page is " & Page.ErrorPage & "."
End Sub
 

"ErrorPage_Handler.aspx" の Page_Load は、次のとおりです。

 
Sub Page_Load(  )
   Message.Text = "We're sorry. An error occurred during the" & _
      " processing of your request. Please try again later."
End Sub
 
メモ

ErrorPage プロパティは、@ Page ディレクティブの ErrorPage 属性を使用して指定することもできます。

 
IsPostBack

Boolean = Page.IsPostBack

 
 

ページが初めて読み込まれたのか (False)、またはクライアントによるポストバックの結果読み込まれたのか (True) を示すブール値を返します。このプロパティは、If ステートメントの構成に応じて、ページが初めて実行されたときまたはページがページ自体にポストバックされるたびに実行する必要のあるロジックに役立ちます。

 
パラメータ
 
  • Boolean
      ページが初めて読み込まれたのか、またはクライアントによるポストバックの結果読み込まれたのかを示すブール値です。
 

次のコード例では、IsPostBack プロパティを使用して、ページが初めて読み込まれた場合またはクライアントによるポストバックの結果読み込まれた場合にそれぞれ異なるメッセージをラベルコントロールに表示します。ページが初めて読み込まれた場合、IsPostBack プロパティは False を返し、文字列 "Non-PostBack" が表示されます。ボタンをクリックするとページはページ自体にポストバックされ、IsPostBack は True を返し、文字列 "PostBack" が表示されます。

 
<%@ Page Language="vb" %>
<html>
   <head>
      <title></title>
      <script runat="server">
         Sub Page_Load(  )
            If Page.IsPostBack Then
               Message.Text = "PostBack"
            Else
               Message.Text = "Non-PostBack"
            End If
         End Sub
      </script>
   </head>
<body>
   <form runat="server">
      <asp:button id="post" Text="Post page" runat="server"/>
      <asp:label id="Message" runat="server"/>
   </form>
</body>
</html>
 
メモ

IsPostBack プロパティは、runat="server" 属性を含む <form> 要素が設定され、またポストバックを発生させる少なくとも 1 つのコントロールが実装されているページに対してのみ True を返します。コントロールには、前述の例で示した Button コントロール、または AutoPostBack プロパティが True に設定されている DropDownList コントロールなどその他のコントロールが含まれます。

 
IsValid

Boolean = Page.IsValid

 
 

ページ上の検証コントロールのうちユーザー入力を検証できなかったコントロールがないかどうかを示すブール値を返します。

 
パラメータ
 
  • Boolean
      検証が成功したかどうかを示すブール値です。
 

次の例では、IsValid プロパティを使用して、現在のページ上の検証が成功したかどうかを判断し、メッセージを表示します。

 
<%@ Page Language="vb" %>
<html>
   <head>
      <title></title>
      <script runat="server">
         Sub Page_Load(  )
            If IsPostBack Then
               Page.Validate(  )
               If Page.IsValid Then
                  Message.Text = "Page is valid."
               Else
                  Message.Text = "Page is not valid."
               End If
            End If
         End Sub
      </script>
   </head>
<body>
   <form runat="server">
      Enter your name:
      <asp:textbox id="name" runat="server"/>
      <asp:requiredfieldvalidator
         id="rfvName"
         controltovalidate="name"
         enableclientscript="false"
         errormessage="Required!"
         runat="server"/>
      <br/>
      <asp:button id="submit" Text="Submit" runat="server"/>
      <br/>
      <asp:label id="Message" runat="server"/>
   </form>
</body>
</html>
 
メモ

IsValid プロパティにより、フォームの検証コントロールによって実行された検証がすべて成功したかどうかが判断されます。ページに検証コントロールがない場合は、このプロパティの値は常に True になります。IsValid の値を確認する前に、前述の例のように Page.Validate メソッドを呼び出すか、または CausesValidation プロパティが True に設定されているコントロール (Button、ImageButton、LinkButton など) が設定されたページを送信済みである必要があります。そうでない場合は、例外が発生します。

 

前述の例では、RequiredFieldValidator コントロールの EnableClientScript プロパティが False に設定されています。このため、クライアントサイドでの検証が無効になります。デフォルトでは、クライアントサイドの検証は有効になり、検証が失敗した場合、ページがサーバーに送信されることはありません。上位レベルのブラウザでは、クライアントサイドのスクリプトを使用してクライアント上で検証が実行され、検証が成功した場合のみページが送信されます。ページが送信された場合にのみ、サーバー側でイベントハンドラーコードが実行され、IsValid プロパティの値に応じたメッセージが表示されます。 _

 

IsValid プロパティの確認は、クライアントサイドでの検証が有効かどうかにかかわらず、悪意のあるクライアントがクライアントサイドでの検証を回避する可能性があるため重要となります。

 
Request

HttpRequest = Page.Request

 
 

着信 HTTP 要求のデータへのアクセスを可能にする HttpRequest クラスのインスタンスを返します。これは、ASP の組み込みオブジェクト Request に相当します。HttpRequest クラスの詳細については、第 16 章を参照してください。

 
パラメータ
 
  • HttpRequest
      着信 HTTP 要求のデータを保持する HttpRequest 型のオブジェクトです。
 

次のコード例では、HttpRequest オブジェクトの ServerVariables コレクションを使用して、要求を送信したクライアントの IP アドレスを表示します。

 
Sub Page_Load(  )
   Message.Text = "The current request is from: " & _
      CStr(Request.ServerVariables.Item("REMOTE_ADDRESS"))
End Sub
 
メモ

Application プロパティや Cache プロパティと同様、要求に関連付けられている HttpRequest インスタンスへのローカル参照を取得できますが、通常は、このインスタンスには、前述の例のように Request プロパティを使用して直接アクセスします。

 
Response

HttpResponse = Page.Response

 
 

応答についての情報を格納し、HTTP 応答データのブラウザへの送信を可能にする HttpResponse クラスのインスタンスを返します。これは、ASP の組み込みオブジェクト Response に相当します。HttpResponse クラスの詳細については、第 17 章を参照してください。

 
パラメータ
 
  • HttpResponse
      HttpResponse クラスのインスタンスを受け取る HttpResponse 型のオブジェクトです。
 

次の例では、Page オブジェクトの Response プロパティを使用して、HttpResponse クラスの ContentType プロパティに text/xml を設定します。このプロパテイを設定すると、Internet Explorer 5.0 以降のブラウザの場合、XML マークアップとして表示されたページが出力されます。

 
Sub Page_Load(  )
   Response.ContentType = "text/xml"
   Message.Text = "This page will be displayed as XML in " & _
      "Internet Explorer 5.0 or above."
End Sub
 
メモ

Application プロパティや Cache プロパティと同様、要求に関連付けられている HttpResponse インスタンスへのローカル参照を取得できますが、通常、このインスタンスには、前述の例のように Request プロパティを使用して直接アクセスします。

 
Server

HttpServerUtility = Page.Server

 
 

ASP.NET 要求を処理する上で有用なメソッドを公開する HttpServerUtility クラスのインスタンスを返します。HttpServerUtility クラスの詳細については、第 18 章を参照してください。

 
パラメータ
 
  • HttpServerUtility
      HttpServerUtility クラスによって公開される有用なプロパティおよびメソッドへのアクセスに使用できる HttpServerUtility 型のオブジェクトです。
 

次のコード例では、Server プロパティを使用して HttpServerUtility クラスの HtmlEncode メソッドにアクセスします。これにより、HTML タグおよび文字をブラウザで解釈して表示するのではなく、HtmlEncode メソッドによりこれらをエンコードしてユーザーに表示することができます。 _

 
Sub Page_Load(  )
   Message.Text = Server.HtmlEncode("<em>Hello, World!</em>")
End Sub
 

このページから生成される HTML は、次のようになります。

 
<html>
   <head>
      <title>Server property example</title>
   </head>
<body>
   <span id="Message">&lt;em&gt;Hello, World!&lt;/em&gt;</span>
</body>
</html>
 
メモ

Request プロパティや Response プロパティと同様、アプリケーションに関連付けられている HttpServerUtility インスタンスへのローカル参照を取得できますが、通常、このインスタンスには、前述の例のように Server プロパティを使用して直接アクセスします。

 
Session

HttpSessionState = Page.Session

 
 

現在のユーザーセッションに関する情報を含むオブジェクトを返します。Session オブジェクトは、ASP.NET アプリケーションからページを要求するそれぞれのユーザーごとに保持されます。セッション固有のデータを Session オブジェクトに格納すると、ASP.NET アプリケーションの複数のページからこのデータにアクセスできます。HttpSessionState クラスの詳細については、第 19 章を参照してください。

 
パラメータ
 
  • HttpSessionState
      現在のユーザーセッションを表す HttpSessionState オブジェクトです。
 

次の例では、Session オブジェクトを使用して、セッション状態に関する情報の格納場所を示す Mode プロパティの値を表示します。

 
Sub Page_Load(  )
   Message.Text = "Current Session State Mode: " &_
           Session.Mode.ToString(  )
End Sub
 
メモ

Request プロパティや Response プロパティと同様、要求に関連付けられている HttpSessionState インスタンスへのローカル参照を取得できますが、通常、このインスタンスには、前述の例のように Session プロパティを使用して直接アクセスします。

 
SmartNavigation

Boolean = Page.SmartNavigation
Page.SmartNavigation = Boolean

 
 

SmartNavigation 機能が有効であるかどうかを示すブール値を返すか、または設定します。SmartNavigation 機能は、Internet Explorer とのみ互換性があり、<iframe> 要素を使用して、ページがポストバックされた場合にページの一部のみを更新できるようにします。これにより、ポストバック時に発生する不快な画面のちらつきを解消することができます。

 
パラメータ
 
  • Boolean
      SmartNavigation 機能が有効であるかどうかを示すブール値です。
 

次のコード例では、@ Page ディレクティブの SmartNavigation 属性を使用して、SmartNavigation プロパティを True に設定します。ページがポストバックされる場合、現在のページのみがブラウザの履歴に保存されるため、[戻る] ボタンは無効になります。

 
<%@ Page Language="vb" SmartNavigation="True" %>
<html>
   <head>
      <title>SmartNavigation property example</title>
      <script runat="server">
         Sub Page_Load(  )
            Message.Text = "This Label will change."
            Message2.Text = "This Label will not change."
         End Sub
         Sub UpdateLabel(Sender As Object, e As EventArgs)
            Message.Text = "This Label has changed."
         End Sub
      </script>
   </head>
<body>
   <form runat="server">
      <asp:label id="Message" runat="server"/>
      <asp:button id="update"
         onClick="UpdateLabel"
         text="Click to update label text"
         runat="server"/>
   </form>
   <asp:label id="Message2" runat="server"/>
</body>
</html>
 
メモ

SmartNavigation 機能を使用すると、ナビゲート時またはポストバック時のちらつきを解消するだけでなく、ページがポストバックされた際に現在のスクロール位置が保持されます。また、ブラウザの履歴には 1 ページだけが保持されるため、ブラウザの [戻る] ボタンをクリックしてページの前の状態に戻る必要がなくなります。

 

このプロパティはコードから設定することもできますが、前述の例のように @ Page ディレクティブの SmartNavigation 属性を使用して設定することをお勧めします。

 
Trace

TraceContext = Page.Trace

 
 

現在の Web 要求に対する TraceContext オブジェクトを返します。トレースを使用すると、Web 要求の実行の詳細が分かります。TraceContext クラスのメンバーは、次のとおりです。

 
メンバー説明
IsEnabled 現在のページに対してトレースが有効であるかどうかを示します。
TraceMode 項目の格納方法を示す TraceMode 列挙のメンバーです。使用できる値は SortByCategory および SortByTime です。"machine.config" で定義されている初期設定値は、SortByTime です。
Warn メソッド 赤のテキストを使用してレースログにメッセージを書き込みます。
Write メソッド トレースログにメッセージを書き込みます。
 
パラメータ
 
  • TraceContext
      TraceContext クラスのインスタンスです。
 

次の例では、Page クラスの Trace プロパティを使用して、トレースをプログラム的に有効にします。

 
Sub Page_Load(  )
   If Trace.IsEnabled = True Then
      Message.Text = "Tracing is enabled."
   Else
      Message.Text = "Tracing is not enabled."
   End If
End Sub
 
メモ

Request プロパティや Response プロパティと同様、要求に関連付けられている TraceContext インスタンスへのローカル参照を取得できますが、通常、このインスタンスには、前述の例のように Trace プロパティを使用して直接アクセスします。アプリケーションのトレースの詳細については、第 10 章を参照してください。

 
User

IPrincipal = Page.User

 
 

ページ要求を送信したユーザーのセキュリティ情報を保持する IPrincipal インターフェイスを実装するオブジェクトのインスタンスを返します。IPrincipal インターフェイスが実装するメンバーは、次のとおりです。 _

 
メンバー説明
Identity プロパティ ページを要求しているユーザーを表す IIdentity オブジェクトを返します。
IsInRole プロパティ ページを要求しているユーザーに特定の役割が与えられているかどうかを示します。
 
パラメータ
 
  • IPrincipal
      IPrincipal を実装するオブジェクト変数です。
 

次の例では、User プロパティを使用してユーザーの認証状態および名前を取得し、これをブラウザに表示します。

 
Sub Page_Load(  )
   Message.Text = "Authenticated: " & _
      User.Identity.IsAuthenticated & "<br/>"
   Message.Text &= "User Name: " & User.Identity.Name
End Sub
 
メモ

User プロパティによって返された IPrincipal オブジェクトを実装するには、"machine.config" または "web.config" のいずれかのファイルで何らかの認証が構成され、また、少なくとも、匿名ユーザーを拒否する承認ルールが構成されている必要があります。これらの条件が満たされていない場合、IIdentity オブジェクトの IsAuthenticated プロパティは False を返し、Name プロパティは空の文字列を返します。

 
ViewState

StateBag = Page.ViewState

 
 

ViewState プロパティは、ページ上のサーバーコントロールの状態情報を保持する StateBag クラスのインスタンスを返します。この StateBag インスタンスは、同一ページへの複数の要求で保持する必要のある任意のデータを格納するために使用することもできます。

 
パラメータ
 
  • StateBag
      ページ上のサーバーコントロールのプロパティ値を保持する StateBag 型のオブジェクトです。この StateBag インスタンスは、同一ページへの複数の要求で保持する必要のある任意のデータを格納するために使用することもできます。
 

次のコード例では、Message コントロールの ForeColor プロパティを設定し、次に、この色の値を ViewState StateBag インスタンスに格納します。この場合、ページがポストバックされると、格納されている色情報をコードが取得し、この色名に応じて、Red から Black またはその逆に色が変更されます。 _

 
<%@ Page Language="vb" %>
<html>
   <head>
      <title>ViewState property example</title>
      <script runat="server">
         Sub Page_Load(  )
            Dim LocalColor As System.Drawing.Color
            If IsPostBack Then
               LocalColor = CType(ViewState("LabelColor"), _
                  System.Drawing.Color)
               If LocalColor.Name = "Black" Then
                  LocalColor = System.Drawing.Color.Red
               Else
                  LocalColor = System.Drawing.Color.Black
               End If
               Message.ForeColor = LocalColor
               Message.Text = "Label color is " & LocalColor.Name
               ViewState("LabelColor") = LocalColor
            Else
               Message.ForeColor = System.Drawing.Color.Black
               LocalColor = Message.ForeColor
               Message.Text = "Label color is " & LocalColor.Name
               ViewState("LabelColor") = LocalColor
            End If
         End Sub
      </script>
   </head>
<body>
   <form runat="server">
      <asp:button id="button"
         text="Click to change label color"
         runat="server"/>
      <asp:label id="Message" runat="server"/>
   </form>
</body>
</html>
 
メモ

ViewState は、サーバーコントロールの状態を自動的に管理する以外に、要求間にページを保存しておくバックグラウンド状態として使用することもできます。StateBag クラスは、整数や文字列などの基本的なデータタイプを格納する以外に、オブジェクトがシリアル化をサポートする場合は、前述のコード例の Color 構造体のようにオブジェクトを格納することもできます。シリアル化をサポートするオブジェクトを ViewState に格納すると、オブジェクトの状態は自動的に ViewState に格納可能な形式にシリアル化されます。また、このオブジェクトを参照すると、シリアル化が解除されてオブジェクトインスタンスに戻ります。

 

ViewState にはオブジェクト型に関する情報が格納されないため、ViewState から取得したオブジェクトは正しい型にキャストする必要があります。前述の例の場合、オブジェクト型は System.Drawing.Color です。

 

また、データセットなどのサイズの大きいオブジェクトを ViewState に格納する場合は、事前に十分検討してください。ViewState は非表示フォームフィールドとして保存されるため、要求ごとにブラウザに送信されます。サイズの大きいオブジェクトを ViewState に格納すると、ページの読み込みに時間がかかります。

 
Controls

ControlCollection = Page.Controls

 
 

ページに関連付けられている ControlCollection インスタンスへのアクセスを提供します。このインスタンスを使用すると、実行時にコントロールを追加または操作することができます。

 
パラメータ
 
  • ControlCollection
      ページに関連付けられているコントロールを保持する ControlCollection 型のオブジェクトです。
 

次のコード例では、Controls プロパティを使用して、ページに関連付けられている ControlCollection クラスのインスタンスの Count プロパティを表示します。次に、コレクションに新しい Label コントロールを追加し、この Label コントロールを使用して、更新された Count プロパティを表示します。

 
Sub Page_Load(  )
   Message.Text = "There are currently " & Controls.Count & _
      " controls on the page.<br/>"
   Dim Message2 As New Label
   Controls.AddAt(Controls.Count - 1, Message2)
   Message2.Text = "There are now " & Controls.Count & _
      " controls on the page."
End Sub
 
メモ

Session プロパティや Trace プロパティと同様、ページに関連付けられている Controls コレクションへのローカル参照を取得できますが、通常、このインスタンスには、前述の例のように Controls プロパティを使用して直接アクセスします。

 

既にコントロールが含まれているページに新たにコントロールを追加する場合は、ControlCollection クラスの AddAt メソッドを使用すると、単純にコレクションの最後にコントロールを配置する Add メソッドを使用するよりも、正確にコントロールを配置できます。前述の例では、Add メソッドを使用した結果、追加した Label コントロールからの出力がページの終了タグ </html> の後に表示されます。これは整形式の HTML ではないため、ブラウザによってはページが正しく表示されない場合があります。

 
Validators

ValidatorCollection = Page.Validators

 
 

要求されたページ上のすべての検証コントロールを保持する ValidatorCollection クラスのインスタンスを返します。それぞれの検証コントロールには、ValidatorCollection コレクションを繰り返し使用してアクセスできます。

 
パラメータ
 
  • ValidatorCollection
      ValidatorCollection 型のオブジェクト変数です。
 

次のコード例では、RequiredFieldValidator および RegularExpressionValidator コントロールが割り当てられた Textbox コントロールを表示します。Page_Load 部分では、Validators プロパティから返された ValidatorCollection に対してコードが繰り返され、このコレクション内の各検証コントロールの ID および ErrorMessage プロパティが表示されます。

 
<%@ Page Language="vb" %>
<html>
   <head>
      <title></title>
      <script runat="server">
         Sub Page_Load(  )
            Dim Validator as BaseValidator
            For Each Validator in Validators
               Message.Text &= Validator.ID & " error message: "
               Message.Text &= Validator.ErrorMessage & "<br/>"
            Next
         End Sub
      </script>
   </head>
<body>
   <form runat="server">
      Phone: <asp:textbox id="phone" runat="server"/>
      <asp:requiredfieldvalidator
         id="rfvPhone"
         controltovalidate="phone"
         display="dynamic"
         errormessage="Required!"
         runat="server"/>
      <asp:regularexpressionvalidator
         id="revPhone"
         controltovalidate="phone"
         display="dynamic"
         validationexpression="^[2-9]\d{2}-\d{3}-\d{4}$"
         errormessage="Enter a phone number in the form xxx-xxx-xxxx"
             runat="server"/>
      <br/>
      <asp:button id="submit" text="Submit" runat="server"/>
   </form>
   <br/>
   <asp:label id="Message" runat="server"/>
</body>
</html>
 
メモ

ここでは、すべての検証コントロールの派生元である BaseValidator コントロールから継承される検証コントロールのプロパティのみを表示しているため、これらのプロパティにアクセスする前に各検証コントロールをそれぞれ特定の型にキャストする必要はありません。ただし、RegularExpressionValidator クラスの ValidationExpression プロパティなど、使用されている検証コントロールの型に固有なプロパティを表示する場合は、コントロールを適切な型にキャストする必要があります。Visual Basic .NET ではこの場合、CType キーワードを使用します。

 
DataBind

Page.DataBind( )

 
 

ページ内のすべてのデータバインディング式を評価および解決します。また、すべての子コントロール上の DataBind を呼び出します。

 
パラメータ

なし

 

次のコード例では、データバインディング式を使用して、Label コントロールタグの ForeColor 属性を Color という名前のローカル変数の値に設定しています。Page_Load 部分で DataBind メソッドが呼び出されると、Color 変数の値が ForeColor 属性に設定されます。これは、コードで ForeColor プロパティを設定した場合と同じことです。

 
<%@ Page Language="vb" %>
<html>
   <head>
      <title></title>
      <script runat="server">
         Dim Color As System.Drawing.Color = System.Drawing.Color.Red
         Sub Page_Load(  )
            Message.Text = "ForeColor is: " & Color.Name
            DataBind(  )
         End Sub
      </script>
   </head>
<body>
   <asp:label id="Message" ForeColor="<%# Color %>" runat="server"/>
</body>
</html>
 
メモ

DataGrid コントロールや DataList コントロールなど、ページ上の特定のコントロールに対してデータバインディングを実行する場合は、そのページではなくコントロールに対して DataBind を呼び出す方が効率的です。これは、特定のコントロールに対して DataBind を呼び出すことで、データバインディングが必要ないコントロールに対して DataBind を呼び出すというオーバーヘッドを排除できるためです。

 
FindControl

Control = Page.FindControl(String)

 
 

検索文字列と名前が一致するコントロールオブジェクトへの参照を返します。FindControl メソッドは、ベースとなる Control クラスのメンバーです。

 
パラメータ
 
  • Control
      FindControl メソッドを使用して検索されたコントロールを表す Control クラスのインスタンスです。コントロールの型に固有のメンバーにアクセスするには、このコントロールを適切なコントロールの型にキャストする必要があります。
  • String
      コントロールのプログラム識別子を保持する文字列です。この値は、宣言型コントロールの ID 属性と同じになります。または、実行時に作成されるコントロールの場合、そのコントロールに定義されたオブジェクト名と同じになります。
 

次の例では、コントロールの ID を使用してこのコントロールを検索し、背景色を変更します。

 
Sub Page_Load(  )
   Dim TheControl As Control = FindControl("Message")
   If Not TheControl Is Nothing Then
      Dim TheLabel As Label = CType(TheControl, Label)
      TheLabel.Text = "Found the label named Message!"
      TheLabel.BackColor = System.Drawing.Color.Blue
   End If
End Sub
 
メモ

FindControl メソッドは、Page クラスの派生元である Control クラスから継承されたメソッドです。ネストされたコントロール、または親ページのコントロールを操作する必要があるユーザーコントロールを操作する場合に便利です。たとえば、ユーザーコントロールのコードにより、このユーザーコントロールを含むページに対して FindControl を呼び出し、同じページ内のコントロールで、このユーザーコントロールの外部に実装されている任意のコントロールを検索および操作することができます。

 
HasControls

Boolean = Page.HasControls( )

 
 

ページに子コントロールが含まれているかどうかを示すブール値を返します。

 
パラメータ
 
  • Boolean
      ページに子コントロールが含まれているかどうかを示すブール値です。
 

次のコード例では、HasControls から返される値に基づいて、ページの Controls コレクションにコントロールが含まれているかどうかを示すメッセージを表示します。

 
Sub Page_Load(  )
   If Page.HasControls = True Then
      Message.Text = "The page contains controls."
   Else
      Message.Text = "The page does not contain controls."
   End If
End Sub
 
LoadControl

objControl = Page.LoadControl(strPath)

 
 

"strPath" ユーザーコントロールファイルで定義されているユーザーコントロールのインスタンスを返します。LoadControl を使用すると、@ Register ディレクティブを使用せずにユーザーコントロールを動的に読み込むことができます。

 
パラメータ
 
  • objControl
      指定されたパスにあるユーザーコントロールを表す Control 型のオブジェクトです。
  • strPath
      ユーザーコントロールファイルへの仮想パスです。
 

次の例では、LoadControl を使用して実行時にユーザーコントロールを読み込み、ページの Controls コレクションに追加します。

 
Sub Page_Load(  )
   Dim Hello As UserControl = LoadControl("hello.ascx")
   Page.Controls.Add(Hello)
End Sub
 

ユーザーコントロール "hello.ascx" は次のようになります。

 
<h1>Hello, World!</h1>
 
MapPath

String = Page.MapPath(virtualPath)

 
 

指定された仮想パスに対応する物理パスを返します。

 
パラメータ
 
  • String
      virtualPath に対応する物理パスを保持する文字列です。
  • virtualPath
      絶対的または相対的な仮想パスを保持する文字列です。
 

次の例では、指定されたページの仮想パスを物理パスにマップします。

 
Sub Page_Load(  )
   Message.Text = MapPath("MapPath.aspx")
End Sub
 
メモ

Page.MapPath メソッドの機能は、Server.MapPath メソッドの機能と同じです。

 
ResolveUrl

String = Page.ResolveUrl(strRelativeUrl)

 
 

相対 URL に対応する絶対 URL を返します。

 
パラメータ
 
  • String
      絶対 URL を保持する文字列です。
  • strRelativeUrl
      相対 URL です。
 

次の例では、現在の相対 URL を絶対 URL にマップします。

 
Sub Page_Load(  )
   Message.Text = Page.ResolveUrl("ResolveUrl.aspx")
End Sub
 
Validate

Page.Validate( )

 
 

ページ上の各検証コントロールの検証ロジックを呼び出します。このメソッドは、呼び出されると、Page オブジェクトの ValidatorCollection コレクションを繰り返し使用して、各検証コントロールに関連付けられている検証ロジックを実行します。

 

IsValid プロパティの例を参照してください。

 
メモ

CausesValidation プロパティが True に設定されている HTML ボタンコントロールまたは ASP ボタンコントロールがクリックされると、Validate メソッドが自動的に呼び出されます。

 
Error

Sub Page_Error(Sender As Object, e As EventArgs) 'エラー処理コード
End Sub

 
 

Error イベントは、ページで未処理の例外が発生した場合に呼び出されます。このイベントにイベントハンドラーが定義されていない場合は、Application_Error イベントが呼び出されます。例外の処理が終了していない場合は、"web.config" に設定されている <customErrors> 要素に制御が渡されます。

 
パラメータ
 
  • Sender
      イベントを生成したオブジェクトについての情報を保持するパラメータです。
  • e
      イベントについての追加情報を保持する EventArgs 型のオブジェクトです。
 

次のコード例では、意図的にオーバーフロー例外を発生させ、この例外を Page_Error ハンドラーで処理し、例外のテキストを表示した後にこれをクリアしています。

 
Sub Page_Load(  )
   Dim x, y, overflow As Integer
   x = 1
   y = 0
   overflow = x / y
End Sub

Sub Page_Error(  )
   Response.Write(Server.GetLastError.ToString(  ))
   Server.ClearError
End Sub
 
メモ

ここでは例外を Server クラスの GetLastError メソッドを使用して取得しています。エラーの処理が完了すると、前述の例のように Server.ClearError を呼び出して例外をクリアするか、例外を次のレベルのエラー処理にバブルアップすることができます。

 

Sender パラメータおよび e パラメータは、前述の例にあるように、このイベントでは省略可能です。

 

@ Page ディレクティブの AutoEventWireup 属性が True (デフォルト) に設定されている場合は、イベントに正しい Page_Error 署名が設定されている限り、ASP.NET によってこのイベント用のイベントハンドラーが自動的に呼び出されます。

 
Init

Sub Page_Init(Sender As Object, e As EventArgs) '初期化コード
End Sub

 
 
パラメータ
 
  • Sender
      イベントを生成したオブジェクトについての情報を保持するパラメータです。
  • e
      イベントについての追加情報を保持する EventArgs 型のオブジェクトです。
 

次のコード例では、Page_Init でラベルの ForeColor プロパティを設定するための変数を初期化し、次にその値を変更して Page_Load 内にある別のラベルの ForeColor プロパティを設定します。

 
<%@ Page Language="vb" %>
<html>
   <head>
      <title>Init event example</title>
      <script runat="server">
         Dim TheColor As System.Drawing.Color
         Sub Page_Init(  )
            TheColor = System.Drawing.Color.Red
         End Sub
         Sub Page_Load(  )
            Message.ForeColor = TheColor
            Message.Text = "The color of the text was set in Page_Init."
            TheColor = System.Drawing.Color.Blue
            Message2.ForeColor = TheColor
            Message2.Text = "The color of the text was set in Page_Load."
         End Sub
      </script>
   </head>
<body>
   <asp:label id="Message" runat="server"/>
   <br/>
   <asp:label id="Message2" runat="server"/>
</body>
</html>
 
メモ

Sender パラメータおよび e パラメータは、前述の例にあるように、このイベントでは省略可能です。

 

@ Page ディレクティブの AutoEventWireup 属性が True (デフォルト) に設定されている場合は、イベントに Page_Init 署名が設定されている限り、ASP.NET によってこのイベント用のイベントハンドラーが自動的に呼び出されます。

 
Load

Sub Page_Load(Sender As Object, e As EventArgs) 'コード
End Sub

 
 

ページの読み込み時に発生します。このイベントはページを要求するごとに発生するため、ページの子コントロールの初期化など、ページレベルで実行する必要がある初期化コードを追加することができます。Load イベントが発生すると、ページの表示状態情報にもアクセスできるようになります。

 

Load イベントには、ASP.NET により次のパラメータが渡されます。

 
 
  • Sender
      イベントを生成したオブジェクトについての情報を保持するパラメータです。
  • e
      イベントについての追加情報を保持する EventArgs 型のオブジェクトです。
 

Init の例を参照してください。

 
メモ

Sender パラメータおよび e パラメータは、前述の例にあるように、このイベントでは省略可能です。

 

@ Page ディレクティブの AutoEventWireup 属性が True (デフォルト) に設定されている場合は、イベントに正しい Page_Load イベント署名が設定されている限り、ASP.NET によってこのイベント用のイベントハンドラーが自動的に呼び出されます。

 
Unload

Sub Page_Unload(Sender As Object, e As EventArgs) 'クリーンアップコード
End Sub

 
 

ページがメモリからアンロードされる際に発生します。このイベントはページがアンロードされる前に発生するため、開かれているファイルやデータベース接続を閉じるなどのクリーンアップ操作を実行することができます。

 

Unload イベントには、ASP.NET により次のパラメータが渡されます。

 
 
  • Sender
      イベントを生成したオブジェクトについての情報を保持するパラメータです。
  • e
      イベントについての追加情報を保持する EventArgs 型のオブジェクトです。
 

次のコード例では、Unload イベントを使用して Page_Load イベントハンドラーで表示のために開かれたファイルを閉じています。

 
Dim TheFile As System.IO.StreamReader
Sub Page_Load(  )
   TheFile = System.IO.File.OpenText(MapPath("Init.aspx"))
   Message.Text = "<pre>" & _
      Server.HtmlEncode(TheFile.ReadToEnd(  )) & "</pre>"
End Sub

Sub Page_Unload(  )
   TheFile.Close(  )
End Sub
 
メモ

Unload イベントは、ページレベルで実行するクリーンアップ作業、データベースなどのリソース、例外により通常のページ処理が中断される可能性がある場合に役立ちますが、Try...Catch...Finally ステートメントの Finally ブロックにリソースのクリーンアップコードを実装することをお勧めします。これにより、クリーンアップコードが確実に実行されます。Try...Catch...Finally ステートメントの詳細については、第 10 章を参照してください。

 

Sender パラメータおよび e パラメータは、前述の例にあるように、このイベントでは省略可能です。

 

@ Page ディレクティブの AutoEventWireup 属性が True (デフォルト) に設定されている場合は、Page_Unload 署名が設定されている限り、ASP.NET によってこのイベント用のイベントハンドラーが自動的に呼び出されます。