@ 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 オブジェクトに 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>

参照

参照

テキスト テンプレートのディレクティブの構文

概念

ASP.NET Web ページの構文の概要

その他の技術情報

ASP.NET ユーザー コントロール