ASP.NET中的CodeBehind技術
一.Code Behind簡介
Code Behind就是所謂的代碼分離,自從Microsoft公司推出了ASP.NET以后,Code Behind就是一個熱門的話題。在一般的ASP.NET文件中,Code Behind主要是用二個文件來創建一個ASP.NET的頁面,其中一個是設計文件,一般以.aspx或者.ascx做為擴展名,而另外一個是程序代碼文件,一般以.vb或者.cs做為擴展名,其程序設計語言主要是VB.Net或者是C#。
二.Code Behind優點
用過ASP編過程序的人都知道,ASP程序是把界面設計和程序設計混合在一起的。因此當程序設計人員要修改應用程序界面布局的時候,就往往需要更改大量與界面無關的代碼,對于一個小程序,工作量不是很大,如果對于代碼量很大的程序,就是一項工作量不小的事情。而Code Behind把界面設計代碼和程序設計代碼以不同的文件分開,對于代碼的重復使用,程序的調試和維護都是革命性的。還有一點是,當你發布你的網站的時候,你就可以利用這種技術來有效的保護你的代碼。這對于程序的安全性是一個提高。Code Behind技術的出現有點象過去VB或者是Delphi出現一樣。這也就是他為什么一出現就成為一個熱門話題的原因。下面我們利用一個完整的例子來具體說明一下Code Behind技術的特點。
三.例子的簡介
本例題的運行環境是Windows 2000 Prefessional版和.Net FrameWork SDK Beat 2。程序設計語言是c#,其主要功能是發送電子郵件。程序分成二個部分,把發送電子郵件的界面代碼以mail.aspx文件保存,而發送的程序是以send.cs文件保存。
四.具體實現步驟
1).新建一個HTML頁面
你可以使用微軟的FontPage來設計你的頁面的整個布局。把你的所以選項都設計到此頁面中去。具體的界面如下圖:
把此HTML文件命名為send.htm。具體代碼如下:
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <meta name="GENERATOR" content="Microsoft FrontPage 4.0"> <meta name="ProgId" content="FrontPage.Editor.Document"> <title>New Page 1</title> </head> <body> <h3>歡迎進入Code Behind設計界面</h3> <form> <table border="1" width="100%"> <tr> <td width="100%" colspan="2">請填入下列各項:</td> </tr> <tr> <td width="35%">姓名</td> <td width="65%"><input type="text" name="Name" size="20"> </td> </tr> <tr> <td width="35%">電子郵件地址</td> <td width="65%"><input type="text" name="Email" size="20"> </td> </tr> <tr> <td width="35%">內容</td> <td width="65%"> <textarea rows="7" name="Message" cols="26"> </textarea> </td> </tr> <tr> <td width="100%" colspan="2"> <input type="submit" value="Submit" name="B1"></td> </tr> </table> </form> <p></p> </body> </html> |
2).創建虛擬目錄
首先在"c:InetPubWWWRoot"目錄下面創建一個目錄為"mail",然后運行"開始>控制面板>管理工具>Internet 服務管理器>"創建虛擬目錄的名稱是"mail",如下圖所示:
3).創建內嵌代碼的ASP.NET文件
如果你已經完成了創建虛擬目錄的工作,并且把send.htm文件拷貝到了此目錄中,請把send.htm文件改名為send.aspx。然后用Windows自帶的NotePad或者其他的文本編輯器打開此文件。
接下來我們首先創建的是代碼內嵌的ASP.NET文件,然后再把把轉換成Code Behind文件。雖然創建代碼內嵌的ASP.NET文件在本文的論述中是一項多余的工作,但這卻方便了調試,便于理解,并且一旦你的代碼內嵌的文件成功運行,再把他轉換成Code Behind文件就相對容易了許多。具體步驟如下:
A).加入頁面表示
在用文本編輯器打開文件的第一行,加入一下表示:
<%@ Page Language="C#" %> |
b).把mail.aspx中用到的Html組件轉換為HtmlControls,可以借助下表來轉換:
HTML | HTML Control |
<form> | <form runat="server" > |
<input type="text" name="Name" size="20" > | <input type="text" id="Name" name="Name" size="20" runat="server" /> |
<input type="text" name="Email" size="20" > | <input type="text" id="Email" name="Email" size="20" runat="server" /> |
<textarea rows="7" name="Message" cols="26"> </textarea> | <textarea rows="7" id="Message" name="Message" cols="26" runat="server"> </textarea> |
<input type="submit" value="Submit" name="B1"> | <input type="submit" id="B1" value="Submit" name="B1" OnServerClick="Post_Form" runat="server"> |
C).加入內嵌代碼
當上面的轉換完成以后,接下來就要寫郵件發送的內嵌代碼。發送郵件使用的是名稱空間--System.Web.Mail中的一個SmtpMail 類。在SmtpMail 類中一個基本的方法--Send。此方法的成功調用需要以下四個參數:
1).電子郵件的源地址
2).電子郵件的目的地址
3).電子郵件的主題
4).電子郵件的內容
只有具備這四個參數,Send方法就能夠成功調用。對于電子郵件的發送可以參考我的以前文章《利用ASP.NET制作自己的郵件發送系統》。在此文中有具體闡述。一下代碼是完整的內嵌代碼:
<%@Page Language="C#" %> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <meta name="GENERATOR" content="Microsoft FrontPage 4.0"> <meta name="ProgId" content="FrontPage.Editor.Document"> <title>New Page 1</title> <script runat="server"> protected void Post_Form(object sender, EventArgs e) { file://Check if the Name and Email fields are filled in if(Name.Value!=""&&Email.Value!="") { file://Send the Mail System.Web.Mail.SmtpMail.Send(Email.Value, "saurabh@mastercsharp.com", "Mail From:"+Name.Value,Message.Value); } } </script> </head> <body> <h3>歡迎進入Code Behind設計界面</h3> <form runat="server"> <table border="1" width="100%"> <tr> <td width="100%" colspan="2">請填入下列各項</td> </tr> <tr> <td width="35%">姓名</td> <td width="65%"> <input type="text" id="Name" name="Name" size="20" runat="server" /> </td> </tr> <tr> <td width="35%">電子郵件地址</td> <td width="65%"> <input type="text" id="Email" name="Email" size="20" runat="server" /> </td> </tr> <tr> <td width="35%">內容</td> <td width="65%"><textarea rows="7" id="Message" name="Message" cols="26" runat="server"> </textarea></td> </tr> <tr> <td width="100%" colspan="2"> <input type="submit" value="Submit" id="B1" name="B1" OnServerClick="Post_Form" runat="Server" /> </td> </tr> </table> </form> <p></p> </body> </html> |
4).開始創建Code Behind文件
如果上面的頁面能夠成功運行,接下來就要把程序代碼從界面設計代碼中分離出來。這要通過以下步驟來完成。
a).創建一個.cs源程序文件
在你的應用程序的主機的虛擬目錄下建立文件名為"Send.cs",并且用文本編輯器打開此文件。
b).拷貝腳本到send.cs程序文件
把mail.aspx中的<script runat="server">到</script>中的所有內容(包括腳本的表示符),剪切到send.cs文件中。
C).修改.cs文件
必須保證send.cs文件是一個正確的c#文件,因此必須對此時的.cs文件進行必要的修改,下面列出修改前后的文件代碼,比較一下二者差異:
沒有修改的C#文件,如下:
<script runat="server"> protected void Post_Form(object sender, EventArgs e) { file://判斷姓名和電子郵件地址是否填入 if(Name.Value!=""&&Email.Value!="") { file://發送電子郵件 System.Web.Mail.SmtpMail.Send(Email.Value, "majinhu@yesky.com", "Mail From:"+Name.Value,Message.Value); } } </script> |
完成修改后的文件,如下:
using System; using System.Web.UI; using System.Web.UI.HtmlControls; public class First:Page { file://聲明使用的組件 protected HtmlInputControl Name, Email; protected HtmlTextArea Message; public void Post_Form(object sender, EventArgs e) { file://判斷姓名和電子郵件地址是否填入 if(Name.Value!=""&&Email.Value!="") { file://發送電子郵件 System.Web.Mail.SmtpMail.Send(Email.Value,"majinhu@yesky.com", "Mail From:"+Name.Value,Message.Value); } } } |
注釋:
第一:這種修改必須要引入必要的名稱空間,在本段程序中用到的名稱空間是"System","System.Web.UI"和"System.Web.UI.HtmlControls"。
第二:用"public class First:Page {" 標識來替代 <script runat="server"> 結束的標識符</script> 用"}"來替代。
第三:最后我們還要聲明在程序中用到的組件。
D).修改界面設計文件(mail.aspx)
上述的工作完成以后,就要修改界面設計文件,讓ASP.NET的運行環境知道在哪里裝入Code Behind文件。于是就進行下列修改,修改后的代碼如下:
mail.aspx
<%@ Page Language="C#" Inherits="First" Src="send.cs" %> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <meta name="GENERATOR" content="Microsoft FrontPage 4.0"> <meta name="ProgId" content="FrontPage.Editor.Document"> <title>New Page 1</title> </head> <body> <h3>歡迎進入Code Behind設計界面</h3> <form runat="server"> <table border="1" width="100%"> <tr> <td width="100%" colspan="2">請填入下列各項</td> </tr> <tr> <td width="35%">姓名</td> <td width="65%"> <input type="text" id="Name" name="Name" size="20" runat="server" /> </td> </tr> <tr> <td width="35%">電子郵件地址</td> <td width="65%"> <input type="text" id="Email" name="Email" size="20" runat="server" /> </td> </tr> <tr> <td width="35%">內容</td> <td width="65%"><textarea rows="7" id="Message" name="Message" cols="26" runat="server"> </textarea></td> </tr> <tr> <td width="100%" colspan="2"> <input type="submit" value="Submit" id="B1" name="B1" OnServerClick="Post_Form" runat="Server" /> </td> </tr> </table> </form> <p></p> </body> </html> |
注釋:
其中的第一句語句很重要,在這個語句中,指定了二個屬性:"Inherits"和"Src"。其中"Inherits"用來識別本頁面所用的類來自何處。"Src"是指定識別代碼文件,這句話的意思是指定了頁面所用的類名和類所在文件的來源。此時把Mail.aspx和Send.cs拷貝到"c:InetPubWWWRoot"中,打開瀏覽器,就可以運行程序了。
五.總結
Code Behind的出現使得編寫功能強大Web程序成為了一件相對容易的事情,Code Behind的功能十分強大,制作又相對靈活。非常適合喜歡組件編程的朋友。