@ Reference
仮想パスの任意の場所に存在する、別のユーザー コントロール、ページ ソース ファイル、または任意のファイルが、動的にコンパイルされ、このディレクティブが宣言されている ASP.NET ファイル (Web ページ、ユーザー コントロール、またはマスタ ページ) に動的にリンクされることを示します。
<%@ Reference Page="path to .aspx page"
Control="path to .ascx file"
virtualPath="path to file" %>
属性
- Page
ASP.NET が動的にコンパイルし、@ Reference ディレクティブを含む現在のファイルに動的にリンクする必要がある、外部ページ。
- Control
ASP.NET が動的にコンパイルし、@ Reference ディレクティブを含む現在のファイルに動的にリンクする必要がある、外部ユーザー コントロール。
- virtualPath
参照の仮想パス。ファイルの種類は、ビルド プロバイダが存在するならどれでもかまいません。たとえば、このパスはマスタ ページをポイントします。
解説
このディレクティブを使用することで、ページ、ユーザー コントロール、または関連付けられているビルド プロバイダが存在する別の種類のファイルを動的にコンパイルし、それを @ Reference ディレクティブを含む現在の Web ページ、ユーザー コントロール、またはマスタ ページにリンクできます。これにより、現在のファイルから、外部でコンパイルされたオブジェクトとそのパブリック メンバを参照できます。
使用例
このディレクティブを使用してユーザー コントロールをリンクし、それを LoadControl メソッドを使用してページに読み込む方法を、次のコード例に示します。コードの前半は、単純なユーザー コントロールです。このコードを新しいファイルに貼り付け、ファイル名を MyControl.ascx としてください。コードの後半は、このユーザー コントロールを参照するページです。このユーザー コントロールがページに読み込まれると、その LabelText
値が設定され、PlaceHolder サーバー コントロールの System.Web.UI.ControlCollection オブジェクトに System.Web.UI.Control.Controls プロパティを使用して追加されます。
<%@ Control language="C#" ClassName="MyControl" %>
<script runat="server">
private string _labelText;
public string LabelText
{
get { return _labelText; }
set
{
if(!String.IsNullOrEmpty(value))
_labelText = Server.HtmlEncode(value);
}
}
void label1_init(object sender, EventArgs e)
{
label1.Text = LabelText;
}
</script>
<asp:label id="label1" runat="server" Text=""
oninit="label1_init" />
<%@ Page language="C#" %>
<%@ Reference Control="MyControl.ascx" %>
<script runat="server">
void Page_Load(Object sender, EventArgs e)
{
MyControl ctrl = (MyControl) Page.LoadControl("MyControl.ascx");
ctrl.LabelText = "Hello World!";
PlaceHolder.Controls.Add(ctrl);
}
</script>
<html>
<body>
<asp:placeholder id="PlaceHolder" runat="server" />
</body>
</html>
<%@ Control language="VB" ClassName="MyControl" %>
<script runat="server">
Dim _labelText As String
Public Property LabelText() as String
Get
Return _labelText
End Get
Set(Byval value as String)
If Not String.IsNullOrEmpty(value) Then
_labelText = Server.HtmlEncode(value)
End If
End Set
End Property
Sub label1_init(Byval sender as Object, _
ByVal e as EventArgs)
label1.Text = LabelText
End Sub
</script>
<asp:label id="label1" runat="server" Text=""
oninit="label1_init" />
<%@ Page language="VB" %>
<%@ Reference Control="MyControl.ascx" %>
<script runat="server">
Sub Page_Load(ByVal sender As Object, _
ByVal e As EventArgs)
Dim ctrl As MyControl = _
CType(Page.LoadControl("MyControl.ascx"), MyControl)
ctrl.LabelText = "Hello World!"
PlaceHolder.Controls.Add(ctrl)
End Sub
</script>
<html>
<body>
<asp:placeholder id="PlaceHolder"
runat="server" />
</body>
</html>