ASP.NET을 사용하면 사용자가 컨트롤을 만들 수 있습니다. 이러한 사용자 정의 컨트롤은 다음과 같이 분류됩니다.
사용자 제어
맞춤 컨트롤
사용자 컨트롤은 다른 많은 페이지에서 사용할 수 있는 소형 ASP.NET 페이지나 웹 양식처럼 작동합니다. 이는 System.Web.UI.UserControl 클래스에서 파생됩니다. 이러한 컨트롤에는 다음과 같은 속성이 있습니다.
확장자는 .ascx입니다.
또는 태그를 포함할 수 없습니다.
Page 지시문 대신 Control 지시문이 있습니다.
이 개념을 이해하기 위해 웹 페이지의 바닥글 역할을 하는 간단한 사용자 정의 컨트롤을 만들어 보겠습니다. 사용자 컨트롤을 만들고 사용하려면 다음 단계를 수행하십시오.
새 웹 애플리케이션을 만듭니다.
솔루션 탐색기에서 프로젝트 폴더를 마우스 오른쪽 단추로 클릭하고 새 항목 추가를 선택합니다.
새 항목 추가 대화 상자에서 웹 사용자 컨트롤을 선택하고 이름을 footer.ascx로 지정합니다. 처음에는 footer.ascx에 Control 지시문만 포함되어 있습니다.
<%@ 제어 언어="C#" AutoEventWireup="true" CodeBehind="footer.ascx.cs" Inherits="customcontroldemo.footer" %>
파일에 다음 코드를 추가합니다.
<table> <tr> <td align="center"> Copyright ©2010 TutorialPoints Ltd.</td> </tr> <tr> <td align="center"> 위치: Hyderabad, AP </td> </ tr></테이블>
웹 페이지에 사용자 정의 컨트롤을 추가하려면 Register 지시문과 페이지 사용자 정의 컨트롤의 인스턴스를 추가해야 합니다. 다음 코드는 지침을 보여줍니다.
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="customcontroldemo._Default" %><%@ 등록 Src="~/footer.ascx" TagName="footer" TagPrefix="Tfooter" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 전환//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" > < head runat="server"> <title> 제목 없는 페이지 </title> </head> <body> <form id="form1" runat="server"> <div> <asp:Label ID="Label1" runat="server" Text="ASP.Net 튜토리얼에 오신 것을 환영합니다 "></asp:Label> <br /> <br /> <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text ="저작권 정보" /> </div> <Tfooter:footer ID="footer1" runat="server" /> </form> </body></html>
실행하면 페이지 바닥글이 표시되고 사이트의 모든 페이지에서 컨트롤을 사용할 수 있습니다.
다음 사항을 준수하십시오.
(1) Register 명령은 컨트롤의 레이블 이름과 레이블 접두사를 지정합니다.
<%@ 등록 Src="~/footer.ascx" TagName="footer" TagPrefix="Tfooter" %>
(2) 페이지에 사용자 컨트롤을 추가할 때 다음 태그 이름과 접두사를 사용해야 합니다.
<Tfooter:footer ID="footer1" runat="서버" />
사용자 지정 컨트롤은 별도의 컬렉션으로 배포됩니다. 동적 링크 라이브러리(DLL)로 컴파일되어 다른 ASP.NET 서비스 컨트롤로 사용됩니다. 다음 방법 중 하나로 만들 수 있습니다.
기존 컨트롤에서 사용자 지정 컨트롤을 가져옵니다.
두 개 이상의 기존 컨트롤을 결합하여 새로운 사용자 정의 컨트롤을 만듭니다.
기본 제어 클래스에서 가져옵니다.
이 개념을 이해하기 위해 단순히 브라우저에 문자 메시지를 렌더링하는 사용자 정의 클래스를 만들어 보겠습니다. 컨트롤을 만들려면 다음 단계를 수행하세요.
새 웹사이트를 만드세요. 솔루션 탐색기의 트리 상단에 있는 솔루션(프로젝트 아님)을 마우스 오른쪽 단추로 클릭합니다.
새 프로젝트 대화 상자의 프로젝트 템플릿에서 ASP.NET 서버 컨트롤을 선택합니다.
위 단계에서는 새 프로젝트를 추가하고 ServerControl1이라는 솔루션에 대한 완전한 사용자 지정 컨트롤을 만듭니다. 이 예에서는 CustomControls 프로젝트의 이름을 지정하겠습니다. 이 컨트롤을 사용하려면 페이지에 등록하기 전에 웹 페이지에 대한 참조로 추가해야 합니다. 기존 프로젝트에 참조를 추가하려면 프로젝트(솔루션 아님)를 마우스 오른쪽 단추로 클릭하고 참조 추가를 클릭합니다.
참조 추가 대화 상자의 프로젝트 탭에서 CustomControl 프로젝트를 선택합니다. 솔루션 탐색기는 참조를 표시할 수 있습니다.
페이지에서 컨트롤을 사용하려면 @Page 지시문 아래에 Register 지시문을 추가하세요.
<%@ Register Assembly="CustomControls" Namespace="CustomControls" TagPrefix="ccs" %>
또한 다른 컨트롤과 마찬가지로 컨트롤을 사용할 수 있습니다.
<form id="form1" runat="server"> <div> <ccs:ServerControl1 runat="server" Text = "저는 사용자 정의 서버 컨트롤입니다" /> </div> </form>
실행되면 아래와 같이 컨트롤의 Text 속성이 브라우저에 표시됩니다.
이전 예에서는 사용자 정의 클래스의 Text 속성 값이 설정되었습니다. ASP.NET은 컨트롤이 생성될 때 기본적으로 이 속성을 추가합니다. 컨트롤 파일 뒤의 다음 코드는 이를 나타냅니다.
System 사용;System.Collections.Generic 사용;System.ComponentModel 사용;System.Linq 사용;System.Text 사용;System.Web 사용;System.Web.UI 사용;System.Web.UI.WebControls 사용;네임스페이스 CustomControls{ [ DefaultProperty("텍스트")] [ToolboxData("<{0}:ServerControl1 runat=server></{0}:ServerControl1 >")] 공개 class ServerControl1 : WebControl { [Bindable(true)] [Category("Appearance")] [DefaultValue("")] [Localized(true)] public string Text { get { String s = (String)ViewState["Text"] ; return ((s == null) ? "[" + this.ID + "]" : s) } set { ViewState["Text"] = value; } } 보호된 재정의 void RenderContents(HtmlTextWriter 출력) { 출력.Write(Text) } }}
위 코드는 사용자 정의 컨트롤에 대해 자동으로 생성됩니다. 사용자 정의 컨트롤 클래스에 이벤트와 메서드를 추가할 수 있습니다.
ServerControl1이라는 이전 사용자 지정 컨트롤을 확장해 보겠습니다. 회문을 검사할 수 있는 권한을 부여하는 checkpalindrome이라는 메서드를 제공하겠습니다.
회문(Palindrome)은 뒤집어도 철자가 같은 단어/리터럴 값입니다. 예를 들어 말라얄람어, 마담, 사라스 등이 있습니다.
사용자 정의 컨트롤에 대한 코드를 확장하면 다음과 같아야 합니다.
System 사용;System.Collections.Generic 사용;System.ComponentModel 사용;System.Linq 사용;System.Text 사용;System.Web 사용;System.Web.UI 사용;System.Web.UI.WebControls 사용;네임스페이스 CustomControls{ [ DefaultProperty("텍스트")] [ToolboxData("<{0}:ServerControl1 runat=server></{0}:ServerControl1 >")] 공개 class ServerControl1 : WebControl { [Bindable(true)] [Category("Appearance")] [DefaultValue("")] [Localized(true)] public string Text { get { String s = (String)ViewState["Text"] ; return ((s == null) ? "[" + this.ID + "]" : s) } set { ViewState["Text"] = value; } } protected override void RenderContents(HtmlTextWriter 출력) { if (this.checkpanlindrome()) {output.Write("이것은 회문입니다: <br />")output.Write("<FONT size=5 color=Blue >"); 출력.쓰기("<B>"); 출력.쓰기(텍스트); 출력.쓰기("</B>"); output.Write("</FONT>"); } else { output.Write("이것은 회문이 아닙니다: <br />"); output.Write("<B>"); 출력.Write("</B>"); 출력.Write("</FONT>") } protected bool checkpanlindrome() if (this.Text != null) { String str = this.Text; String strtoupper = Text.ToUpper(); char[] rev = strtoupper.ToCharArray(); String strrev = new String( rev); if (strtoupper == strrev) { true 반환 } else { false 반환 } }}
스페이스의 코드를 변경할 때, Build --> Build Solution 을 눌러 메소드를 빌드해야 프로젝트에 변경사항이 반영됩니다. 사용자가 텍스트를 제공할 수 있도록 페이지에 텍스트 상자와 버튼 컨트롤을 추가합니다. 버튼을 클릭하면 회문을 확인하는 데 사용됩니다.
<form id="form1" runat="server"> <div> 단어를 입력하세요: <br /> <asp:TextBox ID="TextBox1" runat="server"> </asp:TextBox> <br /> < br /> <asp:Button ID="Button1" runat="server onclick="Button1_Click" Text="회문 확인" /> <br /> <br /> <ccs:ServerControl1 ID="ServerControl11" runat="server" Text = "" /> </div></form>
버튼의 Click 이벤트 핸들러는 단순히 텍스트 상자의 텍스트를 사용자 정의 컨트롤의 텍스트 속성에 복사합니다.
protected void Button1_Click(object sender, EventArgs e){ this.ServerControl11.Text = this.TextBox1.Text;}
실행되면 컨트롤이 회문을 성공적으로 감지합니다.
다음 사항을 준수하세요.
(1) 사용자 정의 컨트롤에 대한 참조를 추가하면 도구 상자에 추가되며 다른 컨트롤과 마찬가지로 도구 상자에서 직접 사용할 수 있습니다.
(2) 사용자 정의 컨트롤 클래스의 RenderContents 메서드가 재정의되었으며 고유한 메서드와 이벤트를 추가할 수 있습니다.
(3) RenderContents 메소드는 HtmlTextWriter 유형 매개변수를 취하며, 이를 브라우저에 표시합니다.