@ Reference

[本文档仅供预览,在以后的发行版中可能会发生更改。包含的空白主题用作占位符。]

指示应该根据在其中声明此指令的当前 ASP.NET 文件(网页、用户控件或母版页),对位于某个虚拟路径的另一个用户控件、页源文件或任意文件进行动态编译和链接。

<%@ 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 指令的当前网页、用户控件或母版页文件。 这样您就可以从当前文件内部引用外部编译的对象及其公共成员。

示例

下面的代码示例演示如何使用该指令链接用户控件,以及如何使用 LoadControl 方法将其加载到包含它的页。 代码的第一部分是一个简单的用户控件。 您应将此代码放在一个新的文件中,并将该文件命名为 MyControl.ascx。 代码的第二部分是引用该用户控件的页面。 当将用户控件加载到页之后,将会设置用户控件的 LabelText 值,并通过 Control.Controls 属性将用户控件添加到 PlaceHolder 服务器控件的 System.Web.UI.ControlCollection 对象。

<%@ 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 Page Syntax Overview

其他资源

ASP.NET User Controls