ASP.NET Web ページのコード モデル
更新 : 2007 年 11 月
ASP.NET Web ページは次の 2 つの部分で構成されます。
マークアップ、サーバー コントロール、および静的テキストを含むビジュアル要素。
イベント ハンドラおよびその他のコードを含むページのプログラミング ロジック。
ASP.NET には、単一ファイル ページ モデルと分離コード ページ モデルというビジュアル要素とコードを管理するための 2 つのモデルがあります。この 2 つのモデルの動作は同じで、両方のモデルに同じコントロールとコードを使用できます。
ここでは、各モデルの動作について説明し、どちらのモデルを選択するかに関するヒントを提供します。
単一ファイル ページ モデル
単一ファイル ページ モデルでは、ページのマークアップとプログラミング コードが物理的に同じ .aspx ファイルにあります。プログラミング コードは、ASP.NET が実行するように指定するための runat="server" 属性を含む script ブロックにあります。
Button コントロールと Label コントロールを含む単一ファイル ページのコード例を次に示します。強調表示された部分は、script ブロックの内部の Button コントロールの Click イベント ハンドラを示します。
<%@ Page Language="VB" %>
<script runat="server">
Protected Sub Button1_Click(ByVal sender As Object, _ ByVal e As System.EventArgs) Label1.Text = "Clicked at " & DateTime.Now.ToString() End Sub
</script>
<html>
<head id="Head1" runat="server">
<title>Single-File Page Model</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Label ID="Label1"
runat="server" Text="Label">
</asp:Label>
<asp:Button ID="Button1"
runat="server" OnClick="Button1_Click" Text="Button">
</asp:Button>
</div>
</form>
</body>
</html>
<%@ Page Language="C#" %>
<script runat="server">
void Button1_Click(Object sender, EventArgs e){ Label1.Text = "Clicked at " + DateTime.Now.ToString();}
</script>
<html>
<head>
<title>Single-File Page Model</title>
</head>
<body>
<form runat="server">
<div>
<asp:Label id="Label1"
runat="server" Text="Label">
</asp:Label>
<br />
<asp:Button id="Button1"
runat="server"
onclick="Button1_Click"
Text="Button">
</asp:Button>
</div>
</form>
</body>
</html>
script ブロックには、ページが必要とするすべてのコードを含めることができます。ページのコードには、この例のようなコントロールのイベント ハンドラ、メソッド、プロパティ、および通常はクラス ファイルで使用するその他のコードを含めることができます。単一ファイル ページは、実行時に Page クラスから派生するクラスとして扱われます。ページに明示的なクラス宣言は含まれません。代わりに、コンパイラはコントロールをメンバとして含む新しいクラスを生成します。すべてのコントロールがページのメンバとして公開されるわけではなく、一部は他のコントロールの子になります。ページのコードはこのクラスの一部になります。たとえば、作成するイベント ハンドラは派生した Page クラスのメンバになります。
詳細については、「ASP.NET ページ クラスの概要」を参照してください。
分離コード ページ モデル
分離コード ページ モデルでは、1 つの .aspx ファイルにマークアップを格納し、別のファイルにプログラム コードを格納できます。コード ファイルの名前は、使用するプログラミング言語によって異なります。
メモ : |
---|
すべての .NET プログラミング言語で、ASP.NET Web ページの分離コード ファイルを作成できるわけではありません。そのような言語は部分クラスをサポートする必要があります。たとえば、J# は部分クラスをサポートしないため、ASP.NET ページの分離コード ファイルの作成はサポートしていません。 |
たとえば、SamplePage というページを作成する場合、マークアップは SamplePage.aspx ファイルに格納し、コードは SamplePage.aspx.vb (Visual Basic)、SamplePage.aspx.cs (C#) などのファイルに格納します。
メモ : |
---|
.NET Framework Version 2.0 で使用される分離コード モデルは、以前のバージョンで使用されたモデルとは異なります。 |
分離コード モデルでは、前のセクションで使用した単一ファイル ページの例は 2 つの部分に分割されます。マークアップが 1 つのファイルに格納され (この例では SamplePage.aspx)、次のコード例に示すように、単一ファイル ページと同様になります。
<%@ Page Language="VB" CodeFile="SamplePage.aspx.vb"
Inherits="SamplePage" AutoEventWire="false" %>
<html>
<head runat="server" >
<title>Code-Behind Page Model</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Label id="Label1"
runat="server" Text="Label" >
</asp:Label>
<br />
<asp:Button id="Button1"
runat="server"
onclick="Button1_Click"
Text="Button" >
</asp:Button>
</div>
</form>
</body>
</html>
<%@ Page Language="C#" CodeFile="SamplePage.aspx.cs"
Inherits="SamplePage" AutoEventWireup="true" %>
<html>
<head runat="server" >
<title>Code-Behind Page Model</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Label id="Label1"
runat="server" Text="Label" >
</asp:Label>
<br />
<asp:Button id="Button1"
runat="server"
onclick="Button1_Click"
Text="Button" >
</asp:Button>
</div>
</form>
</body>
</html>
シングルファイル モデルと分離コード モデルの .aspx ページには、次の 2 つの違いがあります。分離コード モデルには、runat="server" 属性を含む script ブロックがありません。クライアント側スクリプトを記述する場合は、ページに runat="server" 属性を含まない script ブロックを含めることができます。2 番目の違いは、分離コード モデルの @ Page ディレクティブに外部ファイル (SamplePage.aspx.vb または SamplePage.aspx.cs) とクラスを参照する属性が含まれることです。この属性は、.aspx ページをコードにリンクします。
コードは別のファイルにあります。単一ファイル ページの例と同じ Click イベント ハンドラを含む分離コード ファイルのコード例を次に示します。
Partial Class SamplePage
Inherits System.Web.UI.Page
Protected Sub Button1_Click(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles Button1.Click
Label1.Text = "Clicked at " & DateTime.Now.ToString()
End Sub
End Class
using System;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class SamplePage : System.Web.UI.Page
{
protected void Button1_Click(object sender, EventArgs e)
{
Label1.Text = "Clicked at " + DateTime.Now.ToString();
}
}
分離コード ファイルでは、既定の名前空間にすべてのクラス宣言が含まれます。ただし、クラスは partial キーワードを使用して宣言されます。これは、クラス全体が単一のファイルに含まれないことを示します。代わりに、ページが実行されると、コンパイラは .aspx ページと @ Page ディレクティブで参照されるファイルを読み込み、それらを単一のクラスにアセンブルしてから単一のクラスとしてコンパイルします。
部分クラスのファイルは、ページの Page クラスから継承します。詳細については、「ASP.NET ページ クラスの概要」を参照してください。
ページ モデルの選択
シングルファイル モデルと分離コード ページ モデルの機能は同じです。2 つのモデルは実行時に同じ方法で実行され、両者の間にパフォーマンスの違いはありません。したがって、ページ モデルは、アプリケーションのコードを編成する方法、ページ デザインをコードと切り離す必要性などのその他の要素によって選択します。
メモ : |
---|
ここに含まれる例の多くは、単一ファイル ページとして記載されています。これは主に読者の利便性のためで、それぞれの例に 2 つのファイルを記載することを避けるためです。このドキュメントでは単一ファイル ページの例が使用されているからといって、単一ファイル ページが分離コード ページより好まれている、または単一ファイル ページには他に固有の利点があると解釈しないでください。 |
単一ファイル ページの利点
原則として、シングルファイル モデルはコードが主にコントロールのイベント ハンドラで構成されているページに適しています。
単一ファイル ページ モデルの利点は次のとおりです。
コードが比較的少ないページでは、コードとマークアップを同じファイルに格納する利便性が分離コード モデルの他の利点より大きくなります。たとえば、単一ファイル ページでは、コードとマークアップが 1 つの場所にまとめられているため、確認が簡単になります。
シングルファイル モデルを使用して記述されたページでは、ファイルが 1 つしかないため、配置および別のプログラマへの配布が多少簡単になります。
単一ファイル ページにはファイル間の依存関係がないため、名前の変更が簡単です。
ページが単独のファイルにまとまっているため、ソース コード管理システムにおけるファイルの管理が多少簡単になります。
分離コード ページの利点
分離コード ページは、かなりのコード量がある Web アプリケーションまたは複数の開発者が Web サイトを作成する場合に適しています。
分離コード ページ モデルの利点は次のとおりです。
分離コード ページでは、マークアップ (ユーザー インターフェイス) とコードが明確に分割されています。デザイナがマークアップを作成し、プログラマがコードを記述するのは実用的です。
コードは、ページのデザイナおよびマークアップのみを担当するその他のユーザーには公開されません。
コードは、複数のページで再利用できます。
コンパイルと配置
単一ファイル ページと分離コード ページのコンパイルと配置はほとんど同じです。最も簡単な場合は、ページをターゲット サーバーにコピーします。分離コード ページでは、.aspx ページとコード ファイルの両方をコピーします。ページが初めて要求されると、ASP.NET はページをコンパイルして実行します。どちらの場合にも、マークアップと共にソース コードを配置することに注意してください。
Web サイトをプリコンパイルすることもできます。その場合、ASP.NET はページのオブジェクト コードを生成するため、それをターゲット サーバーにコピーできます。プリコンパイルは、シングルファイル モデルと分離コード モデルの両方に使用でき、両方のモデルの出力は同じです。詳細については、「ASP.NET のプリコンパイルの概要」を参照してください。