ASP.NET의 코드 블록
업데이트: 2007년 11월
ASP.NET 단일 파일 페이지 모델은 코드를 포함하는 스크립트 블록이 HTML 앞에 오고 HTML에 특수 태그를 사용할 수 있다는 점에서 ASP(Active Server Pages) 페이지 구조와 비슷합니다. 이 항목에서는 ASP 코드를 ASP.NET으로 업데이트하는 것과 관련된 몇 가지 내용에 대해 설명합니다.
ASP.NET 코드 숨김 페이지 모델은 스크립트 블록 코드를 HTML 및 ASP.NET 태그와 구분합니다. 자세한 내용은 ASP.NET 웹 페이지 구문 개요를 참조하십시오. 컨트롤 속성 값을 데이터에 바인딩할 수 있도록 하는 데이터 바인딩 구문에 대한 자세한 내용은 데이터 바인딩 식 개요를 참조하십시오.
변수 및 프로시저 선언
모든 ASP.NET 프로시저와 전역 변수는 ASP <%...%> 스타일 구분 기호 사이가 아닌 여는 <html> 태그 앞에 배치된 <script > 블록 내에 선언해야 합니다. 변수를 <%...%> 렌더링 블록에 선언할 수는 있지만 이렇게 선언한 변수는 페이지의 다른 렌더링 블록에서만 액세스할 수 있으며 다른 함수나 프로시저에서는 전역으로 액세스할 수 없습니다. 페이지에 script 블록이 두 개 이상 포함될 수 있지만 페이지의 모든 블록에서 프로그래밍 언어가 같아야 합니다.
다음은 스크립트 및 렌더링 블록에 변수와 프로시저를 선언하는 ASP.NET 페이지에 대한 코드 예제입니다. ASP.NET 페이지에 URL 형태로 쿼리 문자열을 전달하면 페이지에 쿼리 문자열이 표시됩니다.
<%@ Page Language="VB" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script >
' The following variables are visible to all procedures
' within the <script> block.
Dim str As String
Dim i, i2 As Integer
Function DoubleIt(ByVal inpt As Integer) As Integer
' The following variable is visible only within
' the DoubleIt procedure.
Dim factor As Integer = 2
DoubleIt = inpt * factor
End Function
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" >
<title>Untitled Page</title>
</head>
<body>
<form id="form1" >
<div>
<%
' The following local variable is visible only within this
' and other render blocks on the page.
Dim myVar
myVar = Request.QueryString
Response.Write("The querystring is " _
& Server.HtmlEncode(myVar.ToString()))
%>
</div>
</form>
</body>
</html>
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script >
// The following variables are visible to all procedures
// within the <script> block.
String str;
int i;
int i2;
int DoubleIt(int inpt)
{
// The following variable is visible only within
// the DoubleIt procedure.
int factor = 2;
return inpt * factor;
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head >
<title>Untitled Page</title>
</head>
<body>
<form id="form1" >
<div>
<%
// The following local variable is visible only within this
// and other render blocks on the page.
object myVar;
myVar = Request.QueryString;
Response.Write("The querystring is " +
Server.HtmlEncode(myVar.ToString()));
%>
</div>
</form>
</body>
</html>
텍스트 렌더링
ASP.NET에서는 렌더링 기능이 지원되지 않습니다. 다음 코드 예제와 같이 이전 버전의 ASP를 사용하면 리터럴 HTML을 프로시저 본문에 삽입할 수 있습니다.
<% Sub SomeProcedure() %>
<H3> Render this line of bold text. </H3>
<% End Sub %>
이 코드를 ASP.NET 페이지에서 사용하면 오류가 발생합니다. ASP.NET 페이지에서는 다음과 같이 코드를 작성해야 합니다.
<script runat=server>
Sub SomeProcedure()
Response.Write("<H3> Render this line in bold text.</H3>")
End Sub
</script>
전역 변수 선언을 제외하고 <script>¢¢ç¦</script> 태그에 포함된 모든 코드는 프로시저 내에서 캡슐화되어야 합니다.
페이지 처리, 로드 및 언로드
ASP에서는 코드가 <%...%> 태그 내에 포함되며 첫 번째 <%> 태그 다음에 나오는 첫 번째 문부터 페이지 처리가 시작됩니다. ASP.NET에서는 페이지가 로드되는 즉시 처리할 코드가 Page_Load 내장 이벤트 내에 포함되어 있어야 합니다. <%...%> 블록 내에 코드를 작성할 수는 있지만 이렇게 작성한 코드는 페이지가 로드된 후 ASP에서와 같이 하향식으로 렌더링 타임에 실행됩니다. 초기화 코드를 실행해야 할 경우에는 이 코드가 Page_Load 이벤트에 나와야 합니다. 이 이벤트는 다음 코드 예제와 같이 ASP.NET 엔진이 페이지를 로드한 직후에 발생됩니다.
<%@ Page Language="VB" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script >
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
' Place all startup code here, including initialization of
' variables, preloading of controls, and loading of
' data from a database.
If Page.IsPostBack Then
Response.Write("<br />Page has been posted back.")
End If
End Sub
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head >
<title>Untitled Page</title>
</head>
<body>
<form id="form1" >
<div>
Hello.<br />
<asp:Button ID="Button1"
Text="Click to Post Back" />
</div>
</form>
</body>
</html>
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script >
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack)
{
Response.Write("<br />Page has been posted back.");
}
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" >
<title>Untitled Page</title>
</head>
<body>
<form id="form1" >
<div>
Hello.<br />
<asp:Button ID="Button1"
Text="Click to Post Back" />
</div>
</form>
</body>
</html>
관련된 Page_Unload 내장 이벤트는 페이지 실행 주기 중에 항상 맨 마지막에 발생되며 페이지 정리 코드를 실행하는 데 사용될 수 있습니다.
자세한 내용은 ASP.NET 페이지 수명 주기 개요 및 ASP.NET 웹 서버 컨트롤 이벤트 모델을 참조하십시오.