ASP.NET でのコード ブロック
更新 : 2007 年 11 月
ASP.NET シングルファイル ページ モデルは、コードを含むスクリプト ブロックが HTML より前に記述され、HTML で特別のマークアップ タグが使用できるという点で ASP (Active Server Pages) のページ構造に似ています。このトピックでは、ASP コードの ASP.NET への更新に関して説明します。
ASP.NET 分離コード ページ モデルでは、スクリプト ブロックのコードが HTML と ASP.NET マークアップ タグと個別に記述されます。詳細については、「ASP.NET Web ページの構文の概要」を参照してください。コントロールのプロパティ値をデータにバインドするデータ バインディング構文については、「データ バインド式の概要」を参照してください。
変数と手順の宣言
すべての ASP.NET の手順とグローバル変数は、ASP <%...%> 形式のデリミタの間ではなく、開始の <html> タグの前に配置した <script runat="server"> ブロックで宣言する必要があります。<%...%> 表示ブロックで変数を宣言することもできますが、そのページの他の表示ブロックへしかアクセスできず、他の関数やプロシージャへグローバルにアクセスできません。1 つのページに複数の script ブロックを含めることはできますが、ページ上のすべてのブロックで同じプログラミング言語を使用する必要があります。
スクリプトの変数と手順および表示ブロックを宣言する ASP.NET ページのコード例を次に示します。クエリ文字列を URL に含めて ASP.NET ページに渡す場合、クエリ文字列はページに表示されます。
<%@ Page Language="VB" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
' The following variables are visible to all procedures
' within the <script> block.
Dim str As String
Dim i, i2 As Integer
Function DoubleIt(ByVal inpt As Integer) As Integer
' The following variable is visible only within
' the DoubleIt procedure.
Dim factor As Integer = 2
DoubleIt = inpt * factor
End Function
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<%
' The following local variable is visible only within this
' and other render blocks on the page.
Dim myVar
myVar = Request.QueryString
Response.Write("The querystring is " _
& Server.HtmlEncode(myVar.ToString()))
%>
</div>
</form>
</body>
</html>
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
// The following variables are visible to all procedures
// within the <script> block.
String str;
int i;
int i2;
int DoubleIt(int inpt)
{
// The following variable is visible only within
// the DoubleIt procedure.
int factor = 2;
return inpt * factor;
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<%
// The following local variable is visible only within this
// and other render blocks on the page.
object myVar;
myVar = Request.QueryString;
Response.Write("The querystring is " +
Server.HtmlEncode(myVar.ToString()));
%>
</div>
</form>
</body>
</html>
テキストのレンダリング
ASP.NET では、表示関数はサポートされていません。次のコード例に示すように、ASP の古いバージョンを使用して、リテラル HTML をプロシージャ本体に挿入できます。
<% Sub SomeProcedure() %>
<H3> Render this line of bold text. </H3>
<% End Sub %>
このコードは、ASP.NET ページではエラーを生成します。ASP.NET では、次のようにコードを記述する必要があります。
<script runat=server>
Sub SomeProcedure()
Response.Write("<H3> Render this line in bold text.</H3>")
End Sub
</script>
<script>?c</script> タグに組み込まれるすべてのコードは、グローバル変数宣言を除いて、プロシージャにカプセル化する必要があります。
ページの処理、読み込み、アンロード
ASP では、コードは <%...%> タグで囲まれ、ページ処理は最初の <%> タグの後の最初のステートメントから始まります。ASP.NET では、ページが読み込まれるとすぐに処理するコードを Page_Load 組み込みイベントに含める必要があります。<%...%> ブロックにコードを記述することもできますが、ページが読み込まれ、ASP と同様に上から下の順序で表示されるときに、そのコードは実行されます。初期化コードを実行する必要がある場合は、次のコード例に示すように、ASP.NET エンジンがページを読み込んだ直後に発生する Page_Load イベントに記述する必要があります。
<%@ Page Language="VB" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
' Place all startup code here, including initialization of
' variables, preloading of controls, and loading of
' data from a database.
If Page.IsPostBack Then
Response.Write("<br />Page has been posted back.")
End If
End Sub
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
Hello.<br />
<asp:Button ID="Button1" runat="server"
Text="Click to Post Back" />
</div>
</form>
</body>
</html>
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack)
{
Response.Write("<br />Page has been posted back.");
}
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
Hello.<br />
<asp:Button ID="Button1" runat="server"
Text="Click to Post Back" />
</div>
</form>
</body>
</html>
関連する Page_Unload 組み込みイベントは、常に、ページ実行有効期間内の最後に発生するイベントであり、ページ クリーンアップ コードを実行するために使用できます。
詳細については、「ASP.NET ページのライフ サイクルの概要」および「ASP.NET Web サーバー コントロールのイベント モデル」を参照してください。
参照
概念
ASP.NET Web サーバー コントロールのイベント モデル