@ 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>