ASP.NET中的代碼分離
最後更新:2017-02-28
來源:互聯網
上載者:User
asp.net|代碼分離 ASP.NET中包含了一種新方法:將商業邏輯代碼從表達代碼中分離出來。這通常被稱為背後的代碼,功能非常強大,並且非常容易執行。實現步驟就是:向ASP.NET 頁面中增加使用者介面元素,並為它們指定屬性“runat=server”。然後,用.NET語言建立一個類檔案來操作這些使用者介面元素。最後,在ASP.NET 頁面頂部增加一個指令,將使用者介面與操作它的類檔案附著在一起。
用一個簡單的例子就能展示它是如何完成的。下面建立一個名叫WebPage.aspx的ASP.NET頁面,在其中粘貼以下代碼:
<%@ Page Language="VB" Inherits="dotNet101.MySample.WebPage" %>
<html>
<head>
<title>Code-Behind Demo</title>
</head>
<body>
<form id="messageForm" runat="server">
<asp:TextBox id="message" runat="server" />
<asp:Button id="submit" OnClick="submit_OnClick" Text="Send Message" runat="server" />
</form>
</body>
</html>
請注意增加到“Page”指令中的“Inherits”屬性,它負責通知ASP.NET頁面應該為其商業邏輯使用“dotNet101.MySample.WebPage”類。我們已經向這個頁面增加了兩個ASP.NET伺服器控制項,並且為它們和Form控制項本身指定了“runat=server”屬性。這些都是背後的代碼類將要操作的控制項。當使用者點擊“submit”(提交)按鈕時,指定給Button伺服器控制項的“OnClick”屬性就會告訴ASP.NET引擎啟用背後代碼類中的submit_OnClick事件處理器。
下面,我們需要建立一個背後代碼類檔案來操作ASP.NET頁面。建立一個名為CodeBehind.vb的檔案,類的Visual Basic.NET 代碼如下:
Imports System
Imports System.Web
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports System.Web.UI.HtmlControls
Namespace dotNet101.MySample
Public Class WebPage : Inherits Page
Protected messageForm As HtmlForm
Protected message As TextBox
Public Sub submit_OnClick(sender As Object, e As EventArgs)
Dim output As Label = New Label
output.Text = "You just typed: " & message.Text
messageForm.Controls.Add(output)
End Sub
End Class
End Namespace
在這個類檔案中,我們引入了許多名稱空間,從而協助背後代碼的處理。如果我們沒有引入這些名稱空間的話,就無權使用適當的.NET對象來使背後代碼工作。然後我們要指定自己的定製名稱空間。這樣以來,如果我們願意的話,就可以在一個檔案中包含一個以上的背後代碼類。否則,每個背後代碼都需要存在於它自己的檔案中,你就需要在ASP.NET頁面“Page”指令的“Src”屬性中指定這個檔案。
我們的WebPage類是從普通的Page(頁面)對象中繼承來的,因此它有權使用它的固有服務。這樣,就可以與ASP.NET 頁面相互作用,並且如果必要的話,可以在Page (頁面)層事件,如Page_Init 和 Page_Load中放置事件。在這個例子中,我們只是想對ASP.NET頁面上的提交按鈕的點擊做出響應,所以我們執行以前在ASP.NET 頁面中引用過的submit_OnClick 事件處理器。在事件處理器內部,我們聲明並且初始化一個新的Label(標籤)伺服器控制項。然後我們抓取“message”TextBox (資訊文字框)伺服器控制項的內容,並將其分配給新的Label(標籤)伺服器控制項。最後,我們向Form(表單)伺服器控制項的Controls(控制項)集合中增加Label(標籤)伺服器控制項。這樣,當頁面重新裝載時,資訊就會被顯示在頁面上。
要注意我們聲明受保護的變數“messageForm”和“message”來存放在ASP.NET頁面上對它們相應控制項的引用,正是這些聲明使我們能夠從背後代碼類中看到和操作控制項。實際上,背後代碼類在遺傳層次上比ASP.NET 頁面本身的位置還要高,因此在ASP.NET 頁面上相應的控制項只是通過遺傳在簡單地“執行”背後代碼類中的聲明。
例子的最後一步是編譯背後代碼類,這可以通過在命令列執行使用下面的指令完成:
vbc /t:library /out:dotNet101.MySample.dll
/r:System.dll,System.Web.dll CodeBehind.vb
運行了這個指令後,一個名為“dotNet101.MySample.dll”的檔案就會出現在目錄中,然後將這個檔案放在ASP.NET網站的 “bin”目錄中。