ASP.NET中的代碼分離
2024-07-10 12:58:13
供稿:網友
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”目錄中。