Code Behind & ASP.NET
ASP.NET의 페이지 구성은 기본적으로 크게 UI와 Logic 부분으로 나뉘어 진다. 이중에 UI를 담당하는 것은 HTML과 여러 서버 컨트롤이며 Logic을 담당하는 것은 C# 코드로 만들어 놓은 여러 메소드(함수)들 이다. 코드 비하인드란 말 그대로 코드를 뒷면에 숨겨 두겠다는 이야기 이다.즉 UI를 만드는 Content Page와 프로그래밍 코드 페이지를 따로 두겠다는 의미 이다. 지금까지의 예제 파일들은 하나의 파일에 UI와 Logic 처리 부분이 같이 들어 있었다. 아래처럼…. 진하게 된 부분이 ASP.NET 프로그래밍 코드 부분(Logic) 이다.
<%@ page language="C#" %>
<script runat="server">
void Button1_Click(object sender, System.EventArgs e) {
Label1.Text = TextBox1.Text + "님 환영 합니다";
}
</script>
<html>
<head></head>
<body>
<h1>Hello World!</h1>
<form method="post" runat="server">
<asp:Label id="Label1" runat="server"> 이름: </asp:Label>
<asp:TextBox id="TextBox1" runat="server"/>
<asp:Button id="Button1" OnClick="Button1_Click" runat="server" Text="확인"/>
</form>
</body>
</html>
위와 같이 되어 있는 구조를 다음과 같이 바꾸어 보자.
[start.aspx]
<html>
<head></head>
<body>
<h1>Hello World!</h1>
<form method="post" runat="server">
<asp:Label id="Label1" runat="server"> 이름: </asp:Label>
<asp:TextBox id="TextBox1" runat="server"/>
<asp:Button id="Button1" OnClick="Button1_Click" runat="server" Text="확인"/>
</form>
</body>
</html>
[start.aspx.cs]
<%@ page language="C#" %>
<script runat="server">
void Button1_Click(object sender, System.EventArgs e) {
Label1.Text = TextBox1.Text + "님 환영 합니다";
}
</script>
위의 경우 분리된 비하인드 코드 파일의 이름을 start.aspx.cs라고 주었는데 이것은 VS.NET이 명명하는 기준을 따른 것이고 이름의 임의의 이름이 가능 하다. 단지 확장자는 .cs, .vb등으로 주어야 하며 System.Web.UI.Page라는 .NET 클래스로부터 상속을 받아야만 한다.
코드비하인드의 작성
ASP.NET에서는 페이지를 위해 특별한 클래스를 하나 준비 해 두었는데 그 클래스의 이름이 Page이며 모든 ASP.NET 코드 비하인데 페이지는 Page라는 클래스로부터 상속을 받아야만 한다. 그러므로 하나의 aspx 페이지당 하나의 비하인드 코드 클래스가 필요하게 된다.하지만 하나의 비하인드 파일을 여러 aspx에서 공유하여 사용 할 수 있다.
우선 코드 비하인드 패이지는 다음과 같은 코드의 골격을 가져야만 한다.
using System
public class Start : System.Web.UI.Page {
}
클래스 이름은 일반적으로 aspx 파일의 이름을 기준으로 하며 이 이름은 현재의 웹어플리케이션에서 고유한 이름이 되어야 한다. 파일명 또한 그러하기에 주로 파일명을 클래스로 이용하는 것이다. System이라는 네임스페이스 아래의 클래스를 쓰기 위해 using문을 통해 정의 했는데 이 System 네임스페이스 안에는 array, Boolean, byte, char, DateTime, int, string등 기본적인 데이터 타입들이 모두 제공 된다. 그래서 필수적으로 정의 하는 것이다.
이제 기존의 start.aspx 페이지의 logic 부분을 작성해 보자.
[start.aspx.cs]
using System;
using System.Web.UI;
pulic class Start : Page {
public void Button1_Click(object sender, System.EventArgs e) {
Label1.Text = TextBox1.Text + "님 환영 합니다";
}
}
코드를 자세히 보면 <script> 태그 안에 있던 그 함수가 그대로 들어와 있음을 알 수 있다.단지 함수의 앞에 public 키워드가 붙어 있는데 코드 비하인드로 구성 할 경우 반드시 붙여 주어야 한다.
다음 한가지가 더 필요한데 Button1_Click 이라는 이벤트 때문이다. Button1_Click 이라는 이벤트 안의 Label1, TextBox1 이라는 컨트롤을 사용 한 것이 보일 것이다. 이 이야기는 코드 비하인드의 특성 상 aspx 페이지의 Label, TextBox 컨트롤에 접근 할 수 있어야 한다는 것이다. 하나의 파일 안에서 작성 된 경우라면 문제되지 않지만 별도의 코드 비하인드로 구성 한 경우에는 웹 폼 페이지의 컨트롤에 접근이 필요 한 경우엔 비하인드 코드 내에서 변수로 선언 해 주어야 한다.
using System;
using System.Web.UI;
using System.Web.UI.WebControls;
public class Start : Page {
public Label Label1;
public TextBox TextBox1;
public void Button1_Click(object sender, System.EventArgs e) {
Label1.Text = TextBox1.Text + "님 환영 합니다";
}
}
이제 이 파일을 start.cs 파일로 저장을 하자.
이번에는 UI 페이지와 연결을 해 보도록 하자. 다음 파일을 start.aspx로 작성 후 저장 하자.
[start.aspx]
<%@ Page language="C#" inherits="Start" Src="start.cs" %>
<html>
<head></head>
<body>
<h1>Hello World!</h1>
<form method="post" runat="server">
<asp:Label id="Label1" runat="server"> 이름: </asp:Label>
<asp:TextBox id="TextBox1" runat="server"/>
<asp:Button id="Button1" OnClick="Button1_Click" runat="server" Text="확인"/>
</form>
</body>
</html>
inherits="Start" Src="start.cs 이 부분의 역할은 현재의 UI 페이지에게 자신의 페이지와 연결될 코드 비하인드 페이지를 알려 주는 것이다. Src 속성은 코드 비하인드 파일명을 알리는 것이며 Inherits라는 속성은 코드 비하인드 내의 어떤 클래스에서 상속을 받을 건지를 정의 하는 것이다.
이제 start.aspx를 실행하여 결과를 확인 해 보자…
위 예제를 실행 하면서 혹시 start.cs 파일을 컴파일 하였는가? 우리는 컴파일 한적이 없다. 그럼에도 실행은 제대로 되었을 것이다. ASP.NET은 코드 비하인드 클래스와 연계된 aspx 파일이 요청 될 경우 코드 비하인드가 컴파일 되지 않았다면 우선적으로 그 클래스를 컴파일 하고 DLL로 만들어 어셈블리 캐시 구역 위에 올려 놓는다. 그 이후에 그것을 필요로 하는 aspx가 실행 된다면 컴파일 단계없이 어셈블리 캐시에 존재하는 해당 DLL(start.cs의 컴파일 본, 중간언어로 작성되어 있다)을 이용하는 것이다. 다신 한번 정리하면 start.cs(Page클래스를 상속 받은)는 프로젝트.DLL로 컴파일 된 후 start.aspx가 실행 될 때 start.aspx로 상속되어 임시 DLL로 만들어 지며 이 DLL이 요청을 처리하여 사용자 브라우저로 보내는 것이다. 이러한 임시 DLL도 한번 만들어 지면 일정 기간 동안 남아 있게 되며 이후의 동일한 요청에 대해 이 DLL로 응답, 출력물을 빠르게 생산 하는 것이다. 결국 이 DLL이 ASP.NET 페이지의 실행을 위해 사용되는 DLL 인 것이다.
만약 클래스를 네임스페이스로 묶어서 작성 하였다면 Project.dll 이라는 dll이 생성되는데 물리적으로 다른 곳에 위치한 파일들의 컴파일 경과를 하나의 dll로 구성 할 수 있는 것이다.
하나의 파일안에 UI와 Logic을 모두 담은 경우와 두 파일로 분리 한 경우 어떤 차이가 있응까? 만약 하나의 파일로 만든다면 단일 파일 이므로 코드 변경 시 매번 새롭게 컴파일을 하지만 별도의 파일로 구성 시 aspx 코드를 변경 한다 해도, 즉 UI를 변경 하더라도 비하인드 클래스(start.cs)의 컴파일은 일어나지 않는다. 단지 런타임 컴파일만 일어 나는 것이다. 결국 단일 파일 보다는 분리 시켜 놓는 것이 성능 면에서 낫다고 볼 수 있다.
--------------------------
여러 클래스를 갖는 CodeBehind
--------------------------
아래와 같은 start.aspx, start.cs 파일을 수정 하자. Start.cs에서 Start2라는 클래스를 추가 한 후 start.aspx에서 이전 예제에서는 Start 클래스를 상속 했지만 이젠 Start2를 상속 하고 있는 것이 보일 것이다.
[start.aspx]
<%@ Page language="C#" inherits="Start2" Src="start.cs" %>
<html>
<head></head>
<body>
<h1>Hello World!</h1>
<form method="post" runat="server">
<asp:Label id="Label1" runat="server"> 이름: </asp:Label>
<asp:TextBox id="TextBox1" runat="server"/>
<asp:Button id="Button1" OnClick="Button1_Click" runat="server" Text="확인"/>
</form>
</body>
</html>
[start.cs]
using System;
using System.Web.UI;
using System.Web.UI.WebControls;
public class Start : Page {
public Label Label1;
public TextBox TextBox1;
public void Button1_Click(object sender, System.EventArgs e) {
Label1.Text = TextBox1.Text + "님 환영 합니다";
}
}
public class Start2 : Page {
protected Label Label1;
protected TextBox TextBox1;
public void Button1_Click(object sender, System.EventArgs e) {
Label1.Text = "홍길동님 환영 합니다";
}
}
---------------------------
VS.NET과 Code Behind
---------------------------
1.VS.NET을 열고 C# ASP.NET 웹 응용 프로그램을 선택 하자. localhost/start 라고 기입한 후 새로운 프로젝트를 생성 하자.
2.폼이 나타나면 폼에서 마우스 우측 버튼을 눌러 속성 페이지 레이아웃을 FloaLayout으로 바꾸도록 하자. GridLayout을 쓰면 실제 소스가 DHtml을 이용하여 상당히 복잡하게 구성이 된다.
3.폼에 Label Control을 하나 올리고 id는 ‘lblMsg’ text 속성은 비워두자.
4.이전에는 버튼 컨트롤을 하나 추가 하도록 하자. Id를 ‘btnSubmit’ 이라고 하고 text는 ‘Click Me’라고 하자.
5.html 소스를 보면 아래와 같이 구성 되어 있을 것이다.
<%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="start.WebForm1" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>WebForm1</title>
<meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
</HEAD>
<body>
<form id="Form1" method="post" runat="server">
<asp:Label id="lblMsg" runat="server"></asp:Label>
<asp:Button id="Button1" runat="server" Text="Button"></asp:Button>
</form>
</body>
</HTML>
새롭게 추가된 속성은 CodeBehind, AutoEventWireup, Inherits 이다. 이전에 수작업을 통해 코드 비하인드를 구성 했을 때는 Src라는 속성을 사용 했지만 VS.NET은 Codebehind 라는 속성을 이용 한다. Codebehind 라는 속성은 VS.NET에서만 사용되는 것이다. 만약 수작업으로 코드 비하인드를 만든다면 반드시 Src 속성을 이용해야 한다.
VS.NET은 페이지 생성시 기본적으로 페이지명 뒤에 cs 라는 확장자를 붙인 WebForm.aspx.cs와 같은 C# 페이지(코드 비하인드 클래스 페이지)를 생성해 주는데 이 코드 비하인드 페이지는 System.Web.UI.Page 라는 클래스를 상속 받은 하나의 C# 클래스 이며 그 이름은 aspx 파일의 이름을 기본적으로 따르는 것이다.
AutoEventWireup 속성은 true인 경우 페이지에서 발생하는 모든 이벤트들은 UI 페이지에서 OnClick = “btnSubmt_OnClick”과 같이 직접 설정 할 수 있다. 만약 false 이면 코드 비하인드 페이지내에 이벤트를 등록 해 주는 작업이 필요 하다. 따라서 VS.NET은 기본적으로 그 값을 false로 두고 이벤트 처리와 관련된 모든 작업을 VS.NET 자체가 스스로 처리하는 식으로 운영 하고 있다. 결국 VS.NET을 시용하는 경우 false 이더라도 그로 인해 필요한 작업을 스스로 처리해 준다는 이야기 이다.
6.솔루션 탐색기에서 Webform1.aspx 에서 마우스 우측 버튼을 눌러 [코드보기]를 선택하자.
아래처럼 나타 날것이다.
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
//기본적으로 프로젝트 명으로 namespace를 만들어 준다.
namespace start
{
/// <summary>
/// WebForm1에 대한 요약 설명입니다.
/// </summary>
public class WebForm1 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Label lblMsg;
protected System.Web.UI.WebControls.Button Button1;
protected System.Web.UI.WebControls.Label Label1;
//
private void Page_Load(object sender, System.EventArgs e)
{
// 여기에 사용자 코드를 배치하여 페이지를 초기화합니다.
}
#region Web Form 디자이너에서 생성한 코드
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 이 호출은 ASP.NET Web Form 디자이너에 필요합니다.
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 디자이너 지원에 필요한 메서드입니다.
/// 이 메서드의 내용을 코드 편집기로 수정하지 마십시오.
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
}
}
7.디자인으로 돌아와 Button을 더블 클릭하여 나타나는 부분에 다음 처럼 코드를 입력 하자.
lblMsg.Text = "반갑습니다... 여러분...";
8.이상과 같이 하여 예제를 완성 하였다. 실행하여 결과를 확인 해 보자.
ASP.NET의 페이지 구성은 기본적으로 크게 UI와 Logic 부분으로 나뉘어 진다. 이중에 UI를 담당하는 것은 HTML과 여러 서버 컨트롤이며 Logic을 담당하는 것은 C# 코드로 만들어 놓은 여러 메소드(함수)들 이다. 코드 비하인드란 말 그대로 코드를 뒷면에 숨겨 두겠다는 이야기 이다.즉 UI를 만드는 Content Page와 프로그래밍 코드 페이지를 따로 두겠다는 의미 이다. 지금까지의 예제 파일들은 하나의 파일에 UI와 Logic 처리 부분이 같이 들어 있었다. 아래처럼…. 진하게 된 부분이 ASP.NET 프로그래밍 코드 부분(Logic) 이다.
<%@ page language="C#" %>
<script runat="server">
void Button1_Click(object sender, System.EventArgs e) {
Label1.Text = TextBox1.Text + "님 환영 합니다";
}
</script>
<html>
<head></head>
<body>
<h1>Hello World!</h1>
<form method="post" runat="server">
<asp:Label id="Label1" runat="server"> 이름: </asp:Label>
<asp:TextBox id="TextBox1" runat="server"/>
<asp:Button id="Button1" OnClick="Button1_Click" runat="server" Text="확인"/>
</form>
</body>
</html>
위와 같이 되어 있는 구조를 다음과 같이 바꾸어 보자.
[start.aspx]
<html>
<head></head>
<body>
<h1>Hello World!</h1>
<form method="post" runat="server">
<asp:Label id="Label1" runat="server"> 이름: </asp:Label>
<asp:TextBox id="TextBox1" runat="server"/>
<asp:Button id="Button1" OnClick="Button1_Click" runat="server" Text="확인"/>
</form>
</body>
</html>
[start.aspx.cs]
<%@ page language="C#" %>
<script runat="server">
void Button1_Click(object sender, System.EventArgs e) {
Label1.Text = TextBox1.Text + "님 환영 합니다";
}
</script>
위의 경우 분리된 비하인드 코드 파일의 이름을 start.aspx.cs라고 주었는데 이것은 VS.NET이 명명하는 기준을 따른 것이고 이름의 임의의 이름이 가능 하다. 단지 확장자는 .cs, .vb등으로 주어야 하며 System.Web.UI.Page라는 .NET 클래스로부터 상속을 받아야만 한다.
코드비하인드의 작성
ASP.NET에서는 페이지를 위해 특별한 클래스를 하나 준비 해 두었는데 그 클래스의 이름이 Page이며 모든 ASP.NET 코드 비하인데 페이지는 Page라는 클래스로부터 상속을 받아야만 한다. 그러므로 하나의 aspx 페이지당 하나의 비하인드 코드 클래스가 필요하게 된다.하지만 하나의 비하인드 파일을 여러 aspx에서 공유하여 사용 할 수 있다.
우선 코드 비하인드 패이지는 다음과 같은 코드의 골격을 가져야만 한다.
using System
public class Start : System.Web.UI.Page {
}
클래스 이름은 일반적으로 aspx 파일의 이름을 기준으로 하며 이 이름은 현재의 웹어플리케이션에서 고유한 이름이 되어야 한다. 파일명 또한 그러하기에 주로 파일명을 클래스로 이용하는 것이다. System이라는 네임스페이스 아래의 클래스를 쓰기 위해 using문을 통해 정의 했는데 이 System 네임스페이스 안에는 array, Boolean, byte, char, DateTime, int, string등 기본적인 데이터 타입들이 모두 제공 된다. 그래서 필수적으로 정의 하는 것이다.
이제 기존의 start.aspx 페이지의 logic 부분을 작성해 보자.
[start.aspx.cs]
using System;
using System.Web.UI;
pulic class Start : Page {
public void Button1_Click(object sender, System.EventArgs e) {
Label1.Text = TextBox1.Text + "님 환영 합니다";
}
}
코드를 자세히 보면 <script> 태그 안에 있던 그 함수가 그대로 들어와 있음을 알 수 있다.단지 함수의 앞에 public 키워드가 붙어 있는데 코드 비하인드로 구성 할 경우 반드시 붙여 주어야 한다.
다음 한가지가 더 필요한데 Button1_Click 이라는 이벤트 때문이다. Button1_Click 이라는 이벤트 안의 Label1, TextBox1 이라는 컨트롤을 사용 한 것이 보일 것이다. 이 이야기는 코드 비하인드의 특성 상 aspx 페이지의 Label, TextBox 컨트롤에 접근 할 수 있어야 한다는 것이다. 하나의 파일 안에서 작성 된 경우라면 문제되지 않지만 별도의 코드 비하인드로 구성 한 경우에는 웹 폼 페이지의 컨트롤에 접근이 필요 한 경우엔 비하인드 코드 내에서 변수로 선언 해 주어야 한다.
using System;
using System.Web.UI;
using System.Web.UI.WebControls;
public class Start : Page {
public Label Label1;
public TextBox TextBox1;
public void Button1_Click(object sender, System.EventArgs e) {
Label1.Text = TextBox1.Text + "님 환영 합니다";
}
}
이제 이 파일을 start.cs 파일로 저장을 하자.
이번에는 UI 페이지와 연결을 해 보도록 하자. 다음 파일을 start.aspx로 작성 후 저장 하자.
[start.aspx]
<%@ Page language="C#" inherits="Start" Src="start.cs" %>
<html>
<head></head>
<body>
<h1>Hello World!</h1>
<form method="post" runat="server">
<asp:Label id="Label1" runat="server"> 이름: </asp:Label>
<asp:TextBox id="TextBox1" runat="server"/>
<asp:Button id="Button1" OnClick="Button1_Click" runat="server" Text="확인"/>
</form>
</body>
</html>
inherits="Start" Src="start.cs 이 부분의 역할은 현재의 UI 페이지에게 자신의 페이지와 연결될 코드 비하인드 페이지를 알려 주는 것이다. Src 속성은 코드 비하인드 파일명을 알리는 것이며 Inherits라는 속성은 코드 비하인드 내의 어떤 클래스에서 상속을 받을 건지를 정의 하는 것이다.
이제 start.aspx를 실행하여 결과를 확인 해 보자…
위 예제를 실행 하면서 혹시 start.cs 파일을 컴파일 하였는가? 우리는 컴파일 한적이 없다. 그럼에도 실행은 제대로 되었을 것이다. ASP.NET은 코드 비하인드 클래스와 연계된 aspx 파일이 요청 될 경우 코드 비하인드가 컴파일 되지 않았다면 우선적으로 그 클래스를 컴파일 하고 DLL로 만들어 어셈블리 캐시 구역 위에 올려 놓는다. 그 이후에 그것을 필요로 하는 aspx가 실행 된다면 컴파일 단계없이 어셈블리 캐시에 존재하는 해당 DLL(start.cs의 컴파일 본, 중간언어로 작성되어 있다)을 이용하는 것이다. 다신 한번 정리하면 start.cs(Page클래스를 상속 받은)는 프로젝트.DLL로 컴파일 된 후 start.aspx가 실행 될 때 start.aspx로 상속되어 임시 DLL로 만들어 지며 이 DLL이 요청을 처리하여 사용자 브라우저로 보내는 것이다. 이러한 임시 DLL도 한번 만들어 지면 일정 기간 동안 남아 있게 되며 이후의 동일한 요청에 대해 이 DLL로 응답, 출력물을 빠르게 생산 하는 것이다. 결국 이 DLL이 ASP.NET 페이지의 실행을 위해 사용되는 DLL 인 것이다.
만약 클래스를 네임스페이스로 묶어서 작성 하였다면 Project.dll 이라는 dll이 생성되는데 물리적으로 다른 곳에 위치한 파일들의 컴파일 경과를 하나의 dll로 구성 할 수 있는 것이다.
하나의 파일안에 UI와 Logic을 모두 담은 경우와 두 파일로 분리 한 경우 어떤 차이가 있응까? 만약 하나의 파일로 만든다면 단일 파일 이므로 코드 변경 시 매번 새롭게 컴파일을 하지만 별도의 파일로 구성 시 aspx 코드를 변경 한다 해도, 즉 UI를 변경 하더라도 비하인드 클래스(start.cs)의 컴파일은 일어나지 않는다. 단지 런타임 컴파일만 일어 나는 것이다. 결국 단일 파일 보다는 분리 시켜 놓는 것이 성능 면에서 낫다고 볼 수 있다.
--------------------------
여러 클래스를 갖는 CodeBehind
--------------------------
아래와 같은 start.aspx, start.cs 파일을 수정 하자. Start.cs에서 Start2라는 클래스를 추가 한 후 start.aspx에서 이전 예제에서는 Start 클래스를 상속 했지만 이젠 Start2를 상속 하고 있는 것이 보일 것이다.
[start.aspx]
<%@ Page language="C#" inherits="Start2" Src="start.cs" %>
<html>
<head></head>
<body>
<h1>Hello World!</h1>
<form method="post" runat="server">
<asp:Label id="Label1" runat="server"> 이름: </asp:Label>
<asp:TextBox id="TextBox1" runat="server"/>
<asp:Button id="Button1" OnClick="Button1_Click" runat="server" Text="확인"/>
</form>
</body>
</html>
[start.cs]
using System;
using System.Web.UI;
using System.Web.UI.WebControls;
public class Start : Page {
public Label Label1;
public TextBox TextBox1;
public void Button1_Click(object sender, System.EventArgs e) {
Label1.Text = TextBox1.Text + "님 환영 합니다";
}
}
public class Start2 : Page {
protected Label Label1;
protected TextBox TextBox1;
public void Button1_Click(object sender, System.EventArgs e) {
Label1.Text = "홍길동님 환영 합니다";
}
}
---------------------------
VS.NET과 Code Behind
---------------------------
1.VS.NET을 열고 C# ASP.NET 웹 응용 프로그램을 선택 하자. localhost/start 라고 기입한 후 새로운 프로젝트를 생성 하자.
2.폼이 나타나면 폼에서 마우스 우측 버튼을 눌러 속성 페이지 레이아웃을 FloaLayout으로 바꾸도록 하자. GridLayout을 쓰면 실제 소스가 DHtml을 이용하여 상당히 복잡하게 구성이 된다.
3.폼에 Label Control을 하나 올리고 id는 ‘lblMsg’ text 속성은 비워두자.
4.이전에는 버튼 컨트롤을 하나 추가 하도록 하자. Id를 ‘btnSubmit’ 이라고 하고 text는 ‘Click Me’라고 하자.
5.html 소스를 보면 아래와 같이 구성 되어 있을 것이다.
<%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="start.WebForm1" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>WebForm1</title>
<meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
</HEAD>
<body>
<form id="Form1" method="post" runat="server">
<asp:Label id="lblMsg" runat="server"></asp:Label>
<asp:Button id="Button1" runat="server" Text="Button"></asp:Button>
</form>
</body>
</HTML>
새롭게 추가된 속성은 CodeBehind, AutoEventWireup, Inherits 이다. 이전에 수작업을 통해 코드 비하인드를 구성 했을 때는 Src라는 속성을 사용 했지만 VS.NET은 Codebehind 라는 속성을 이용 한다. Codebehind 라는 속성은 VS.NET에서만 사용되는 것이다. 만약 수작업으로 코드 비하인드를 만든다면 반드시 Src 속성을 이용해야 한다.
VS.NET은 페이지 생성시 기본적으로 페이지명 뒤에 cs 라는 확장자를 붙인 WebForm.aspx.cs와 같은 C# 페이지(코드 비하인드 클래스 페이지)를 생성해 주는데 이 코드 비하인드 페이지는 System.Web.UI.Page 라는 클래스를 상속 받은 하나의 C# 클래스 이며 그 이름은 aspx 파일의 이름을 기본적으로 따르는 것이다.
AutoEventWireup 속성은 true인 경우 페이지에서 발생하는 모든 이벤트들은 UI 페이지에서 OnClick = “btnSubmt_OnClick”과 같이 직접 설정 할 수 있다. 만약 false 이면 코드 비하인드 페이지내에 이벤트를 등록 해 주는 작업이 필요 하다. 따라서 VS.NET은 기본적으로 그 값을 false로 두고 이벤트 처리와 관련된 모든 작업을 VS.NET 자체가 스스로 처리하는 식으로 운영 하고 있다. 결국 VS.NET을 시용하는 경우 false 이더라도 그로 인해 필요한 작업을 스스로 처리해 준다는 이야기 이다.
6.솔루션 탐색기에서 Webform1.aspx 에서 마우스 우측 버튼을 눌러 [코드보기]를 선택하자.
아래처럼 나타 날것이다.
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
//기본적으로 프로젝트 명으로 namespace를 만들어 준다.
namespace start
{
/// <summary>
/// WebForm1에 대한 요약 설명입니다.
/// </summary>
public class WebForm1 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Label lblMsg;
protected System.Web.UI.WebControls.Button Button1;
protected System.Web.UI.WebControls.Label Label1;
//
private void Page_Load(object sender, System.EventArgs e)
{
// 여기에 사용자 코드를 배치하여 페이지를 초기화합니다.
}
#region Web Form 디자이너에서 생성한 코드
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 이 호출은 ASP.NET Web Form 디자이너에 필요합니다.
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 디자이너 지원에 필요한 메서드입니다.
/// 이 메서드의 내용을 코드 편집기로 수정하지 마십시오.
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
}
}
7.디자인으로 돌아와 Button을 더블 클릭하여 나타나는 부분에 다음 처럼 코드를 입력 하자.
lblMsg.Text = "반갑습니다... 여러분...";
8.이상과 같이 하여 예제를 완성 하였다. 실행하여 결과를 확인 해 보자.
오라클자바커뮤니티교육센터, 개발자전문교육, 개인80%환급
www.oraclejavacommunity.com
평일주간(9:30~18:10) 개강
(7/21)[기업100%환급]자바기초에서 JDBC, Servlet/JSP까지
(7/21)[기업100%환급]Spring ,MyBatis,Hibernate실무과정
(7/21)[기업100%환급]PL/SQL,ORACLE HINT,TUNING
(7/21)[채용예정교육]오라클자바개발잘하는신입뽑기프로젝트,교육전취업확정
(7/28)[기업100%환급]C#4.0,WinForm,ADO.NET프로그래밍
(7/28)[기업100%환급]안드로이드개발자과정
(7/28)[기업100%환급]SQL기초에서 Schema Object까지
평일야간(19:00~21:50) 개강
(7/21)웹퍼블리싱 마스터
(7/22)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지
(7/22)닷넷(C#,Network,ADO.NET,ASP.NET)마스터과정
(7/24)SQL기초에서실무까지
(7/29)안드로이드개발자과정
(7/29)Spring3.X, MyBatis, Hibernate실무과정
(8/05)MyBatis3.X, Hibernate4.X ORM실무과정
주말(10:00~17:50) 개강
(7/19)JSP,Ajax,jQUERY,Spring,MyBatis,Hibernate속성과정
(7/19)SQL초보에서 Schema Object까지
(7/19)C#,ASP.NET마스터
(7/19)Spring3.X, MyBatis, Hibernate실무과정
(7/19)웹퍼블리싱 마스터
(7/19)안드로이드개발자과정
(7/26)개발자를위한PLSQL,SQL튜닝,힌트
(8/02)MyBatis3.X, Hibernate4.X ORM실무과정
(8/09)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지
(8/23)JAVA,Network&WEB&Framework(자바기초에서웹스프링까지)
주말저녁(18:30~22:20) 개강
(8/02)JAVA,Network&WEB&Framework
(8/09)SQL기초에서실무까지
www.oraclejavacommunity.com
평일주간(9:30~18:10) 개강
(7/21)[기업100%환급]자바기초에서 JDBC, Servlet/JSP까지
(7/21)[기업100%환급]Spring ,MyBatis,Hibernate실무과정
(7/21)[기업100%환급]PL/SQL,ORACLE HINT,TUNING
(7/21)[채용예정교육]오라클자바개발잘하는신입뽑기프로젝트,교육전취업확정
(7/28)[기업100%환급]C#4.0,WinForm,ADO.NET프로그래밍
(7/28)[기업100%환급]안드로이드개발자과정
(7/28)[기업100%환급]SQL기초에서 Schema Object까지
평일야간(19:00~21:50) 개강
(7/21)웹퍼블리싱 마스터
(7/22)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지
(7/22)닷넷(C#,Network,ADO.NET,ASP.NET)마스터과정
(7/24)SQL기초에서실무까지
(7/29)안드로이드개발자과정
(7/29)Spring3.X, MyBatis, Hibernate실무과정
(8/05)MyBatis3.X, Hibernate4.X ORM실무과정
주말(10:00~17:50) 개강
(7/19)JSP,Ajax,jQUERY,Spring,MyBatis,Hibernate속성과정
(7/19)SQL초보에서 Schema Object까지
(7/19)C#,ASP.NET마스터
(7/19)Spring3.X, MyBatis, Hibernate실무과정
(7/19)웹퍼블리싱 마스터
(7/19)안드로이드개발자과정
(7/26)개발자를위한PLSQL,SQL튜닝,힌트
(8/02)MyBatis3.X, Hibernate4.X ORM실무과정
(8/09)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지
(8/23)JAVA,Network&WEB&Framework(자바기초에서웹스프링까지)
주말저녁(18:30~22:20) 개강
(8/02)JAVA,Network&WEB&Framework
(8/09)SQL기초에서실무까지
댓글 없음:
댓글 쓰기