사용자 지정 서버 컨트롤 구문
사용자 지정 서버 컨트롤 구문은 웹 페이지, 사용자 정의 컨트롤 및 마스터 페이지와 같은 ASP.NET 응용 프로그램 파일에서 사용자 정의 컨트롤과 사용자 지정 서버 컨트롤을 태그 요소로 선언하는 데 사용됩니다. 사용자 지정 컨트롤 및 사용자 정의 컨트롤의 경우 컨트롤에 해당하는 고유한 태그 접두사와 태그 이름을 선언한다는 점을 제외하면 이 구문은 모든 ASP.NET 서버 컨트롤을 선언하는 데 사용되는 구문과 거의 동일합니다.
<tagprefix:tagname id="OptionalID"
attributename="value"
eventname="eventhandlermethod"
runat="server" />
OR
<tagprefix:tagname id="OptionalID"
runat="server" />
특성
tagprefix
페이지에 사용되는 태그 요소의 정규화된 네임스페이스에 대한 별칭입니다. 별칭 값은 선택적 요소이지만 별칭을 사용하면 사용자 지정 컨트롤 또는 사용자 정의 컨트롤의 태그를 ASP.NET 파일에 선언된 다른 태그 요소의 네임스페이스와 쉽게 연결할 수 있습니다.tagname
사용자 지정 컨트롤의 경우 tagname은 ASP.NET에서 런타임 인스턴스를 만드는 형식의 이름을 나타냅니다. 사용자 정의 컨트롤의 경우 tagname은 사용자 정의 컨트롤을 정의하는 연결된 소스 파일에 매핑되고 이 소스 파일은 ASP.NET에서 인스턴스를 만드는 형식을 정의합니다.id
컨트롤을 프로그래밍 방식으로 참조할 수 있게 하는 고유한 식별자입니다.attributename
컨트롤 속성에 해당하는 특성의 이름입니다.value
특성(속성)에 할당된 값입니다.eventname
컨트롤의 이벤트 이름입니다.eventhandlermethod
컨트롤에 대해 지정된 이벤트를 처리하기 위해 정의된 이벤트 처리기의 이름입니다.
설명
사용자 지정 서버 컨트롤 구문을 사용하여 ASP.NET 웹 페이지의 본문에서 사용자 정의 컨트롤과 사용자 지정 서버 컨트롤을 선언할 수 있습니다. 이 구문이 작동하려면 컨트롤이 페이지 또는 구성 파일에 등록되어 있어야 합니다. Web.config 파일의 <controls>에 컨트롤을 추가하여 응용 프로그램의 모든 페이지에 해당 컨트롤을 등록할 수 있습니다. @ Register 지시문을 사용하면 개별 페이지에 컨트롤을 등록할 수 있습니다.
사용자 정의 컨트롤 또는 사용자 지정 컨트롤에 대한 요소의 여는 태그에는 runat="server" 특성/값 쌍이 포함되어야 합니다. 컨트롤을 프로그래밍 방식으로 참조할 수 있게 하려면 필요에 따라 id 특성에 고유한 값을 지정할 수 있습니다.
사용자 정의 또는 사용자 지정 서버 컨트롤에 작성한 모든 속성을 서버 컨트롤의 여는 태그에 선언적으로 노출할 수 있습니다. 이렇게 하려면 속성을 특성으로 선언하고 값을 할당합니다. 예를 들어 width 속성이 포함된 사용자 지정 텍스트 상자 컨트롤을 만드는 경우 컨트롤의 여는 태그에 width="50"을 선언하면 서버 컨트롤의 디스플레이 너비가 50픽셀로 설정됩니다.
특성은 고유한 속성을 포함하는 개체가 될 수도 있습니다. 이런 경우에는 선언에 속성 이름을 포함해야 합니다. 예를 들어 font 특성이 포함된 사용자 지정 텍스트 상자 컨트롤을 만드는 경우 이 컨트롤에 name 속성이 포함될 수 있습니다. 이런 경우, 서버 컨트롤의 여는 태그에 속성을 font-name="Arial"과 같이 선언할 수 있습니다. 속성이 포함된 사용자 지정 서버 컨트롤을 개발하는 방법에 대한 자세한 내용은 서버 컨트롤의 간단한 속성 및 하위 속성을 참조하십시오.
다른 ASP.NET 서버 컨트롤과 마찬가지로 사용자 지정 서버 컨트롤 및 사용자 정의 컨트롤로 이벤트를 선언할 수 있습니다. 이렇게 하려면 컨트롤의 특성과 값을 지정하여 서버 컨트롤의 여는 태그에 이벤트 바인딩을 지정합니다. 이벤트를 지원하는 사용자 지정 서버 컨트롤을 작성하는 방법에 대한 자세한 내용은 ASP.NET 웹 페이지에서 서버 이벤트 처리를 참조하십시오.
인라인 템플릿을 지원하는 사용자 지정 서버 컨트롤을 사용하거나 개발할 수 있습니다. 사용자 지정 서버 컨트롤에서 템플릿을 선언하는 방법에 대한 자세한 내용은 서버 컨트롤 인라인 템플릿 구문을 참조하십시오. 인라인 템플릿을 지원하는 사용자 지정 서버 컨트롤을 작성하는 방법을 보려면 방법: 템플릿 기반 ASP.NET 사용자 정의 컨트롤 만들기를 참조하십시오.
예제
다음 코드 예제에서는 ASP.NET 웹 페이지에 사용자 지정 서버 컨트롤을 등록하고 선언하는 방법을 보여 줍니다. 첫 번째 코드 섹션에서는 Button 클래스에서 파생되는 공용 클래스를 만듭니다. 두 번째 코드 부분은 사용자 지정 단추를 호스팅하는 웹 페이지입니다. 이 웹 페이지에서는 @ Register 지시문을 사용하여 컨트롤의 네임스페이스를 등록하고 tagprefix 특성을 설정합니다. 그런 다음 콜론(:)으로 구분된 tagprefix 값과 컨트롤의 클래스 이름을 사용하여 페이지에서 해당 컨트롤이 참조됩니다.
코드 예제를 실행하려면 이 사용자 지정 컨트롤을 컴파일해야 합니다. 이 코드를 명시적으로 컴파일하여 결과 어셈블리를 웹 사이트의 Bin 폴더나 전역 어셈블리 캐시에 둘 수 있습니다. 또는 소스 코드를 사이트의 App_Code 폴더에 두어 런타임에 동적으로 컴파일되도록 할 수 있습니다. 이 코드 예제에서는 동적 컴파일을 사용하므로 페이지의 @ Register 지시문에서 Assembly 특성을 선언할 필요가 없습니다. 소스는 런타임에 동적으로 컴파일되기 때문입니다. 컴파일 방법을 알려 주는 연습을 보려면 연습: 사용자 지정 웹 서버 컨트롤 개발 및 사용을 참조하십시오.
보안 정보 |
---|
이 예제에는 사용자 입력을 허용하는 텍스트 상자가 있으므로 보안상 위험할 수 있습니다.기본적으로 ASP.NET 웹 페이지에서는 사용자 입력 내용에 스크립트나 HTML 요소가 포함되어 있지 않은지 확인합니다.자세한 내용은 스크립트 악용 개요를 참조하십시오. |
// A custom Button control to reference in the page.
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Security.Permissions
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
namespace Samples.AspNet.CS.Controls
{
[AspNetHostingPermission(SecurityAction.Demand,
Level = AspNetHostingPermissionLevel.Minimal)]
[AspNetHostingPermission(SecurityAction.InheritanceDemand,
Level = AspNetHostingPermissionLevel.Minimal)]
public class CustomButton : Button
{
public CustomButton()
{
this.Text = "Click Here";
}
}
}
<!-- A page that references the custom control. -->
<%@Page language="C#" %>
<!-- This directive does not require the assembly attribute
because the source file is in the App_Code directory,
so it gets dynamically compiled with the page. -->
<%@ Register TagPrefix="custom"
namespace="Samples.AspNet.CS.Controls" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<script runat="server">
private void custButton_Click(Object sender, EventArgs e)
{
TextBox.BackColor = System.Drawing.Color.Green;
TextBox.Text = "You clicked the button";
}
</script>
<body>
<form id="Form1" runat=server>
Here is the custom button.<br>
<custom:CustomButton runat="server" id="custButton"
onclick="custButton_Click" />
<br>
<br>
<asp:TextBox id = "TextBox" Text="Click the button"
Width = "200" BackColor="Cyan" runat="server" />
<br>
</form>
</body>
</html>
' A custom Button control to reference in the page.
Imports System
Imports System.Collections
Imports System.ComponentModel
Imports System.Drawing
Imports System.Security.Permissions
Imports System.Web
Imports System.Web.Configuration
Imports System.Data.Sql
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports System.Web.UI.WebControls.WebParts
Namespace Samples.AspNet.VB.Controls
<AspNetHostingPermission(SecurityAction.Demand, _
Level:=AspNetHostingPermissionLevel.Minimal)> _
<AspNetHostingPermission(SecurityAction.InheritanceDemand, _
Level:=AspNetHostingPermissionLevel.Minimal)> _
Public Class CustomButton
Inherits Button
Public Sub New()
Me.Text = "Click Here"
End Sub
End Class
End Namespace
<!-- A page that references the custom control. -->
<%@ Page Language="VB" %>
<!-- This directive does not require the assembly attribute
because the source file is in the App_Code directory,
so it gets dynamically compiled with the page. -->
<%@ Register TagPrefix="custom"
namespace="Samples.AspNet.VB.Controls" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<script runat="server">
Sub custButton_Click(ByVal sender As Object, _
ByVal e As EventArgs)
TextBox.BackColor = Drawing.Color.Green
TextBox.Text = "You clicked the button."
End Sub
</script>
<body>
<form id="Form1" runat=server>
Here is the custom button.<br>
<custom:CustomButton runat="server" id="custButton"
onclick="custButton_Click" />
<br>
<br>
<asp:TextBox id = "TextBox" Text="Click the button"
Width = "200" BackColor="Cyan" runat="server" />
<br>
</form>
</body>
</html>