방법: CodeBehind 특성을 사용하는 ASP.NET 1.1 웹 페이지를 ASP.NET 2.0으로 마이그레이션
업데이트: 2007년 11월
이 항목에서는 @ Page 지시문의 CodeBehind 특성을 사용하는 웹 페이지와 사용자 정의 컨트롤을 만들고 컴파일한 다음 .NET Framework 버전 2.0에서 코드 숨김 파일의 partial 클래스와 함께 CodeFile 특성을 사용하도록 이를 변환하는 방법을 보여 줍니다.
ASP.NET 버전 2.0의 새로운 웹 페이지 코드 숨김 모델은 partial 클래스를 기반으로 합니다. 이 모델에서 페이지의 태그는 .aspx 파일에 저장되고 코드는 코드 숨김 파일의 partial 클래스에 정의됩니다. 기존의 웹 페이지를 새로운 코드 숨김 모델로 변환하면 partial 클래스에 인스턴스 변수나 명시적 이벤트 바인딩을 포함할 필요가 없으므로 태그와 코드를 훨씬 더 확실하게 분리할 수 있습니다.
@ Page 지시문의 CodeBehind 및 Inherits 특성을 사용하는 웹 페이지는 .NET Framework 2.0에서도 계속 작동합니다. 그러나 이 경우에도 코드 숨김 파일을 컴파일하고 그 어셈블리 결과를 Bin 폴더에 저장해야 합니다.
ASP.NET 2.0 코드 숨김 모델로 마이그레이션하려면 .aspx 파일과 코드 숨김 파일을 적절히 조정하여 변경해야 합니다. .aspx 파일에서 CodeBehind 특성을 CodeFile 특성으로 바꿉니다. 코드 숨김 파일에서는 partial 클래스를 사용합니다. 새로운 코드 숨김 모델을 사용하면 ASP.NET 컴파일러에서 자동으로 작업이 진행되므로 코드 숨김 파일을 명시적으로 컴파일할 필요가 없다는 이점이 있습니다.
또한 새로운 코드 숨김 모델을 사용하는 경우에는 @ Register 지시문을 사용하여 다른 코드 숨김 파일에 대한 참조를 추가해야 합니다.
아래에서 설명하는 절차에 따라 만든 웹 페이지에 액세스하려면 Microsoft IIS(인터넷 정보 서비스)에 가상 디렉터리를 만들어야 합니다. IIS의 가상 디렉터리를 만드는 데 대한 자세한 내용은 방법: IIS 5.0 및 6.0에서 가상 디렉터리 만들기 및 구성을 참조하십시오.
CodeBehind 특성을 사용하는 웹 페이지와 사용자 정의 컨트롤을 컴파일하려면
다음 코드 예제와 같이 @ Page 지시문의 CodeBehind 특성을 사용하는 웹 페이지를 만듭니다.
<%@ Page Language="VB" AutoEventWireup="true" CodeBehind="CodeBehindExample.aspx.vb" Inherits="CodeBehindExample" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head > <title>Code-Behind Using the CodeBehind Attribute</title> </head> <body> <form id="form1" > <div> <asp:Label id="Label1" ></asp:Label> </div> </form> </body> </html>
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="CodeBehindExample.aspx.cs" Inherits="CodeBehindExample" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head > <title>Code-Behind Example</title> </head> <body> <form id="form1" > <div> <asp:Label id="Label1" ></asp:Label> </div> </form> </body> </html>
Public Class CodeBehindExample Inherits System.Web.UI.Page Protected Label1 As System.Web.UI.WebControls.Label Protected Sub Page_Load(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles Me.Load Dim uc As CodeBehindExampleUserControl = _ CType(LoadControl("~/CodeBehindExampleUserControl.ascx"), _ CodeBehindExampleUserControl) Label1.Text = CType(uc.FindControl("Label2"), _ System.Web.UI.WebControls.Label).Text End Sub End Class
public class CodeBehindExample : System.Web.UI.Page { protected System.Web.UI.WebControls.Label Label1; protected void Page_Load(object sender, System.EventArgs e) { CodeBehindExampleUserControl uc = (CodeBehindExampleUserControl)LoadControl ("~/CodeBehindExampleUserControl.ascx"); Label1.Text = ((System.Web.UI.WebControls.Label) uc.FindControl("Label2")).Text; } }
코드 숨김 파일에는 .aspx 페이지에 선언된 Label 컨트롤에 상응하는 선언이 있습니다. 또한 이 코드 숨김 클래스는 partial 클래스가 아닌 일반적인 클래스 정의라는 점을 염두에 두어야 합니다.
다음 코드 예제에서와 같이 @ Control 지시문의 CodeBehind 특성을 사용하는 사용자 정의 컨트롤을 만듭니다.
<%@ Control Language="VB" AutoEventWireup="false" CodeBehind="CodeBehindExampleUserControl.ascx.vb" Inherits="CodeBehindExampleUserControl" %> <asp:Label id="Label2" > Label text in user control. </asp:Label>
<%@ Control Language="C#" AutoEventWireup="false" CodeBehind="CodeBehindExampleUserControl.ascx.cs" Inherits="CodeBehindExampleUserControl" %> <asp:Label id="Label2" > Label text in user control. </asp:Label>
Public Class CodeBehindExampleUserControl Inherits System.Web.UI.UserControl Protected Sub Page_Load(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles Me.Load ' User control code. End Sub End Class
public class CodeBehindExampleUserControl : System.Web.UI.UserControl { protected void Page_Load(object sender, System.EventArgs e) { // User control code. } }
웹 페이지에 대한 코드 숨김 파일과 마찬가지로 사용자 정의 컨트롤에 대한 코드 숨김 파일에도 partial 클래스가 아닌 일반 클래스가 사용됩니다.
웹 페이지와 사용자 정의 컨트롤을 컴파일하고 코드 라이브러리를 응용 프로그램의 Bin 폴더에 저장합니다. CodeBehind 특성을 사용하려면 모든 코드 숨김 클래스를 하나의 코드 라이브러리로 컴파일하고 그 결과로 생성된 .dll 파일을 Bin 폴더에 저장해야 합니다. 이 웹 페이지 및 사용자 정의 컨트롤 예제의 경우 두 코드 숨김 파일을 모두 컴파일하는 컴파일 문은 다음과 같습니다.
vbc /target:library /nologo /out:bin\CodeBehindExample.dll /r:System.dll,System.Web.dll CodeBehindExample.aspx.vb CodeBehindExampleUserControl.ascx.vb
csc /target:library /nologo /out:bin\CodeBehindExample.dll CodeBehindExample.aspx.cs CodeBehindExampleUserControl.ascx.cs
브라우저에서 CodeBehindExample.aspx 웹 페이지를 요청하여 이 웹 페이지가 .NET Framework 2.0에서 작동하는지 확인합니다.
CodeBehind 특성을 사용하는 웹 페이지와 사용자 정의 컨트롤을 ASP.NET 2.0 코드 숨김 모델로 변환하려면
웹 페이지의 .aspx 파일을 다음 코드 예제와 같이 변경합니다.
<%@ Reference Control="~/CodeBehindExampleUserControl.ascx" %> <%@ Page Language="VB" AutoEventWireup="false" CodeFile="CodeBehindExample.aspx.vb" Inherits="CodeBehindExample" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head > <title>Code-Behind Example</title> </head> <body> <form id="form1" > <div> <asp:Label id="Label1" ></asp:Label> </div> </form> </body> </html>
<%@ Reference Control="~/CodeBehindExampleUserControl.ascx" %> <%@ Page Language="C#" AutoEventWireup="true" CodeFile="CodeBehindExample.aspx.cs" Inherits="CodeBehindExample" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head > <title>Code-Behind Example</title> </head> <body> <form id="form1" > <div> <asp:Label id="Label1" ></asp:Label> </div> </form> </body> </html>
.aspx 파일에서 @ Page 지시문의 CodeBehind 특성 대신 CodeFile 특성이 사용됩니다. @ Reference 지시문은 코드 숨김 페이지에서 사용자 정의 컨트롤을 참조하는 데 사용됩니다.
웹 페이지의 코드 숨김 파일을 다음 코드 예제와 같이 변경합니다.
Partial Class CodeBehindExample Inherits System.Web.UI.Page Protected Sub Page_Load(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles Me.Load Dim uc As CodeBehindExampleUserControl = _ CType(LoadControl("~/CodeBehindExampleUserControl.ascx"), _ CodeBehindExampleUserControl) Label1.Text = CType(uc.FindControl("Label2"), _ System.Web.UI.WebControls.Label).Text End Sub End Class
public partial class CodeBehindExample : System.Web.UI.Page { protected void Page_Load(object sender, System.EventArgs e) { CodeBehindExampleUserControl uc = (CodeBehindExampleUserControl)LoadControl ("~/CodeBehindExampleUserControl.ascx"); Label1.Text = ((System.Web.UI.WebControls.Label) uc.FindControl("Label2")).Text; } }
이 코드 숨김 파일에서는 .aspx 페이지에 대한 코드를 추가로 정의하기 위해 partial 클래스가 사용됩니다. 이제는 CodeBehind 특성을 기반으로 한 이전의 코드 숨김 페이지에서와 달리 .aspx 페이지에 사용되는 Label 컨트롤을 선언할 필요가 없습니다.
사용자 정의 컨트롤의 .aspx 파일을 다음 코드 예제와 같이 변경합니다.
<%@ Control Language="VB" AutoEventWireup="false" CodeFile="CodeBehindExampleUserControl.ascx.vb" Inherits="CodeBehindExampleUserControl" %> <asp:Label id="Label2" > Label text in user control. </asp:Label>
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="CodeBehindExampleUserControl.ascx.cs" Inherits="CodeBehindExampleUserControl" %> <asp:Label id="Label2" > Label text in user control. </asp:Label>
웹 페이지의 경우와 마찬가지로 이제 사용자 정의 컨트롤에는 CodeBehind 특성 대신 CodeFile 특성이 사용됩니다.
사용자 정의 컨트롤의 코드 숨김 파일을 다음 코드 예제와 같이 변경합니다.
Partial Class CodeBehindExampleUserControl Inherits System.Web.UI.UserControl Protected Sub Page_Load(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles Me.Load ' User control code. End Sub End Class
public partial class CodeBehindExampleUserControl : System.Web.UI.UserControl { protected void Page_Load(object sender, System.EventArgs e) { // User control code. } }
웹 페이지의 코드 숨김 파일과 마찬가지로 사용자 정의 컨트롤의 코드 숨김 파일에도 이제 partial 클래스가 사용됩니다.
이전에 만들었던 CodeBehindExample.dll 파일을 Bin 폴더에서 삭제합니다.
ASP.NET 2.0에서는 처음 요청 시 이 페이지를 해당 코드 숨김 파일과 함께 컴파일합니다.
CodeBehindExample.aspx 웹 페이지를 요청하여 이전과 마찬가지로 작동하는지 확인합니다.