방법: 프로그래밍 방식으로 ASP.NET 사용자 정의 컨트롤의 인스턴스 만들기
업데이트: 2007년 11월
ASP.NET 웹 페이지에 있는 서버 컨트롤의 경우와 마찬가지로 사용자 정의 컨트롤의 인스턴스도 프로그래밍 방식으로 만들 수 있습니다.
사용자 정의 컨트롤의 인스턴스를 프로그래밍 방식으로 만들려면
사용자 정의 컨트롤에 클래스를 할당하는 ClassName 특성이 해당 사용자 정의 컨트롤의 @ Control 지시문에 포함되어 있는지 확인합니다.
다음 예제에서는 ClassName 특성을 설정하여 사용자 정의 컨트롤을 강력하게 형식화합니다.
<%@ Control className="MyUserControl" %>
사용자 정의 컨트롤로 작업할 페이지에서 @ Reference 지시문을 사용하여 사용자 정의 컨트롤에 대한 참조를 만듭니다.
사용자 정의 컨트롤을 프로그래밍 방식으로 만들 경우에는 사용자 정의 컨트롤에 대한 참조를 만든 후에만 ASP.NET 웹 페이지에서 사용자 정의 컨트롤의 강력한 형식을 사용할 수 있습니다. 예를 들어 다음 코드에서는 MyUserControl.ascx 파일에서 만든 사용자 정의 컨트롤에 대한 참조를 만듭니다.
<%@ Reference Control="MyUserControl.ascx" %>
참고: 컨트롤을 프로그래밍 방식으로 로드하려는 경우 @ Reference를 사용합니다. 사용자 정의 컨트롤을 선언적으로 페이지에 추가할 경우에는 @ Register 지시문을 사용합니다. 자세한 내용은 방법: ASP.NET 웹 페이지에 사용자 정의 컨트롤 포함을 참조하십시오.
사용자 정의 컨트롤의 클래스 이름을 사용하여 이 컨트롤에 대한 인스턴스 변수를 만듭니다. 클래스는 ASP 네임스페이스의 일부가 됩니다.
예를 들어 Spinner 클래스로 선언된 사용자 정의 컨트롤의 인스턴스를 만들려면 다음과 같은 구문을 사용합니다.
Protected Spinner1 As ASP.Spinner
Protected ASP.Spinner Spinner1;
코드에서 LoadControl 메서드를 호출하여 사용자 정의 컨트롤의 인스턴스를 만듭니다.
필요한 경우 속성 값을 할당한 후 페이지에 있는 컨테이너의 ControlCollection 컬렉션에 컨트롤(예: PlaceHolder 컨트롤)을 추가합니다.
참고: Add 메서드를 사용하여 ControlCollection 개체에 컨트롤을 추가하는 경우 이러한 컨트롤은 처리되는 순서대로 컬렉션에 배치됩니다. 컬렉션의 특정 위치에 컨트롤을 추가하려면 AddAt 메서드를 사용하고 컨트롤을 저장할 인덱스 위치를 지정하십시오.
예제
다음 예제에서는 사용자 정의 컨트롤을 프로그래밍 방식으로 로드하는 ASP.NET 웹 페이지를 보여 줍니다. 이 페이지에는 컨트롤의 파일을 지정하기 위한 @ Reference 지시문이 포함되어 있습니다. LoadControl 메서드는 파일을 읽은 후 이 파일을 페이지에 추가할 수 있는 컨트롤로 인스턴스화합니다.
<%@ Page Language="VB" %>
<%@ Reference Control="~\Controls\Spinner.ascx" %>
<script >
Private Spinner1 As ASP.Spinner
Protected Sub Page_Load(ByVal sender As Object, _
ByVal e As System.EventArgs)
Spinner1 = CType(LoadControl("~\Controls\Spinner.ascx"), _
ASP.Spinner)
' Set MaxValue first.
Spinner1.MaxValue = 20
Spinner1.MinValue = 10
PlaceHolder1.Controls.Add(Spinner1)
End Sub
Protected Sub Button1_Click(ByVal sender As Object, _
ByVal e As System.EventArgs)
Label1.Text = Spinner1.CurrentNumber.ToString()
End Sub
</script>
<html>
<head id="Head1" >
<title>Load User Control Programmatically</title>
</head>
<body>
<form id="form1" >
<div>
<asp:PlaceHolder runat=server ID="PlaceHolder1" />
<br />
<asp:Button ID="Button1"
Text="Button"
OnClick="Button1_Click" />
<br />
<br />
<asp:Label ID="Label1" Text=""></asp:Label>
</div>
</form>
</body>
</html>
<%@ Page Language="C#" %>
<%@ Reference Control="~/Controls/Spinner.ascx" %>
<script >
private ASP.Spinner Spinner1;
protected void Page_Load(object sender, EventArgs e)
{
Spinner1 = (ASP.Spinner)LoadControl("~/Controls/Spinner.ascx");
// Set MaxValue first.
Spinner1.MaxValue = 20;
Spinner1.MinValue = 10;
PlaceHolder1.Controls.Add(Spinner1);
}
protected void Button1_Click(object sender, EventArgs e)
{
Label1.Text = Spinner1.CurrentNumber.ToString();
}
</script>
<html>
<head id="Head1" >
<title>Load User Control Programmatically</title>
</head>
<body>
<form id="form1" >
<div>
<asp:PlaceHolder runat=server ID="PlaceHolder1" />
<br />
<asp:Button ID="Button1"
Text="Button"
OnClick="Button1_Click" />
<br />
<br />
<asp:Label ID="Label1" Text=""></asp:Label>
</div>
</form>
</body>
</html>