ASP.Net中程序構(gòu)架與程序代碼的分離_第1頁
ASP.Net中程序構(gòu)架與程序代碼的分離_第2頁
ASP.Net中程序構(gòu)架與程序代碼的分離_第3頁
ASP.Net中程序構(gòu)架與程序代碼的分離_第4頁
ASP.Net中程序構(gòu)架與程序代碼的分離_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、ASP.Net中程序構(gòu)架與程序代碼的分離    一年前,當本人拿到一個名叫TWIG的PHP程序時,立即被作者OOP編程思想所折服,很難想像TWIG中所有的功能(行事歷、郵件、個性化)均在一個PHP文件(index.php3)中執(zhí)行完成,這就得益于作者采用了程序代碼與頁面構(gòu)架分離的思想,但是我也看到盡管作者做了很大的努力,但由于PHP的局限性,程序并沒有真正做到代碼與構(gòu)架的分離,index.php3這個主文件由于要執(zhí)行的功能太多,所以其require的模塊文件相當之多,至使整個文件依然顯得十分零亂,本人愚昧,當時花了半個月的時間,才真正明白程序的構(gòu)架,分析

2、代碼之苦,無人能知啊(黯然淚下.)。TWIG程序?qū)ξ掖撕蟮木幊逃兄艽蟮挠绊?,但是即使這樣的作品,依然沒有擺脫程序代碼與HTML代碼混雜的局面。程序代碼與頁面構(gòu)架的分離是WEB程序員多年的夢想。在ASP.Net出現(xiàn)之前,無論是ASP、PHP還是JSP,程序代碼與HTML代碼都是混雜在一起的,這種做法,雖然在WEB技術(shù)初期受到贊揚,但是隨著時間的的推移,它的弊端是越來越明顯,當程序代碼很長時,HTML代碼與其混雜,程序的可讀性變得很差,讓人無法分清程序真正要表示的頁面構(gòu)架。而新技術(shù)ASP.Net則通過Codebehind、用戶控件(User Control)以及自定義控件(Custom Cont

3、rol)等方法真正做到了代碼的分離。這是一個了不起的進步,大家可以在本文中看到分離代碼后的ASP.Net程序的結(jié)構(gòu)是多么的清晰。為了便于理解,這里設(shè)計的頁面比較簡單,頁面分為三個主要的部分,頭部包含一個AdRotator控件(用于顯示廣告)與一個Label控件(用于顯示當前廣告鏈接地址);中部是一個登陸頁面,包括兩個TextBox控件(分別用于輸入用戶名與密碼)、一個Label控件(顯示登陸是否成功)與一個Button控件(作為提交按鈕);底部包含兩個Label控件(分別顯示當前用戶名與用戶權(quán)限)。熟悉ASP.Net的朋友,馬上就會意識到頭部由于使用了AdRotator控件,所以必定存在OnA

4、dCreated事件以便在Label控件顯示相應鏈接;而中部由于使用Button控件做為提交按鈕,所以必定有一個OnClick事件處理。1 CodeBehind首先我們就看看如何使用CodeBehind方法來實現(xiàn)代碼與頁面構(gòu)架的分離,下面給出的源程序是主ASP.Net程序-Example1.aspx:<% Page Src="csEventHandle.cs" Inherits="Aspcn" %><html><head><title></title></head><body&

5、gt;<form runat="server"><asp:Panel id="Header" runat="server"><asp:AdRotator id="ad" AdvertisementFile="AdBannersad.xml" BorderWidth="0" OnAdCreated="AdCreated" runat="server" /><br>當前廣告鏈接:<asp

6、:Label id="lblAdText" ForeColor="red" runat="server" /></asp:Panel><asp:Panel id="Logon" runat="server"><table><tr><td colspan="2" align="center"><b>登陸窗口</b></td></tr><tr

7、><td colspan="2" align="center"><asp:Label id="lblMsgShow" ForeColor="red" runat="server" /></td></tr><tr><td>用戶名:</td><td><asp:TextBox id="tbUserName" runat="server" /><

8、/td></tr><tr><td&     gt;密碼:</td><td><asp:TextBox id="tbPasswd" TextMode="Password" runat="server" /></td></tr><tr><td><asp:Button id="btnSubmit" Text="登陸" OnClick

9、="Submit_Click" runat="server" /></td></tr></table></asp:Panel><asp:Panel id="Footer" runat="server">用戶名:<asp:Label id="lblUserName" Font-Name="Arial" ForeColor="red" Text="游客" runat=&

10、quot;server" />權(quán)限:<asp:Label id="lblPurview" Font-Name="Arial" Text="無" ForeColor="red" runat="server" /></asp:Panel></form></body></html>例程中,大家可以清楚地看到程序中不包含任何C#、VB、JavaScript來處理OnAdCreated與OnClick事件,但是執(zhí)行本程序,程序能夠

11、正常使用(如圖2-1與圖2-2)。這便是使用CodeBehinde的結(jié)果,事件處理已經(jīng)被轉(zhuǎn)移到其它程序中定義執(zhí)行。請大家注意本例中第一行的信息:<% Page Src="csEventHandle.cs" Inherits="Aspcn" %>private string strConnString = "server=(local)Feidao;database=aspcn;Trusted_Connection=yes"/處理Adrotator控件建立事件 public void AdCreated(Object src

12、,AdCreatedEventArgs e)lblAdText.Text = e.AlternateText;public void Submit_Click(Object sender,EventArgs e)SqlConnection MyConn = new SqlConnection(strConnString);MyConn.Open();string strUserName,strPassword,strSelect;strUserName = tbUserName.Text;strPassword = tbPasswd.Text;strSelect = "select

13、* from bbs_user where id='"+strUserName+"' and password='"+strPas     sword+"'"SqlCommand MyComm = new SqlCommand(strSelect,MyConn);SqlDataReader dr = MyComm.ExecuteReader();if(dr.Read()/登陸成功lblMsgShow.Text = "登陸成功"lblUserName.Te

14、xt = dr"id".ToString();lblPurview.Text = dr"purview".ToString();else/登陸不成功lblMsgShow.Text = "登陸不成功"dr.Close();MyConn.Close();進行事件處理是定義在一個類中的(本例中是Aspcn,注意大小寫),由于需要與Web Forms相關(guān)聯(lián),所以此類還必須繼承Page類。分析程序,大家可以看到程序中對事件的處理操作是與普通的未進行代碼分離的程序是一樣的,并沒有什么特別的地方。(本人在程序中已經(jīng)給出的相關(guān)注釋,相信對大家理解程序

15、有所幫助)使用CodeBehind技術(shù)后,大家需要多寫一些代碼,比如聲明控件等,也許大家很不喜歡多寫這樣的代碼,但是大家也必須看到使用了CodeBehind技術(shù)后,主程序的可讀性大大增加了。在Example1.aspx中相信大家很快就可以區(qū)分頁面構(gòu)架的各個部分,大家想想這些構(gòu)架如果在其它技術(shù)是否能看得如此清楚?(這里的程序只做演示用,呵呵,大家可不要抓我什么引號漏洞這些小辮子喲)2 用戶控件(UserControl)CodeBehind技術(shù)真正實現(xiàn)了代碼與構(gòu)架的分離,比以前的技術(shù)前進了一大步,但是它的缺陷也是顯而易見的,比如主頁面中部那個登陸區(qū),如果內(nèi)容很多,HTML顯示代碼的依然會占用很大的

16、區(qū)域,程序的可讀性依然會降低。ASP.Net也提供了解決辦法,這就是用戶控件。用戶控件我們可以將其視為不用編譯的Server控件。即然是控件,那么就肯定會遵從控件的使用方法。我們將Example1.aspx中的每個Panel整體看成為一個控件,因此Example1.aspx的主體部分通過使用用戶控件便可以減少為只有三行:<% Register TagPrefix="aspcn" TagName="Header" Src="UserControls/Header.ascx" %><% Register TagPrefi

17、x="aspcn" TagName="Logon" Src="UserControls/Logon.ascx" %><% Register TagPrefix="aspcn" TagName="Footer" Src="UserControls/Footer.ascx" %><html><head><title></title></head><body><form runat=&q

18、uot;server"><aspcn:Header id="MyHeader" runat="server" /><aspcn:Logon id="MyLogon" runat="server" /><aspcn:Footer id="MyFooter" runat="server" /></form></body></html>執(zhí)行這個程序,其運行結(jié)果與使用CodeBehind技術(shù)的結(jié)果

19、是一樣的,但是現(xiàn)在的ASP.Net程序更加容易區(qū)分頁面構(gòu)架了。<aspcn:Header id="MyHeader" runat="server" /><aspcn:Logon id="MyLogon" runat="server" /><aspcn:Footer id="MyFooter" runat="server" />這三行代碼,使用了三個用戶控件,這么少的代碼大家一眼就可以清楚的看到頁面被分為三個部分。要使用用戶控件就必須使用Re

20、gister指令,TagPrefix屬性定義是的一個Namespa     ce的名字,以保證它在這個頁面的唯一性;TagName屬性是在定義一個類(class)的別名,由于用戶控件執(zhí)行時是被CLR編譯成為類來執(zhí)行的,所以就必須給本程序中每個用戶控件一個唯一的名字,以便于大家區(qū)分;Src屬性則是具體指出了使用的用戶控件的文件名(用戶控件均以.ascx結(jié)尾)。用戶控件的使用與普通Server控件一樣:<namespace:class . runat="server" />namespace表示定義的命名空間,class則是相

21、應的類名,具體的使用例子有:<aspcn:Logon id="MyLogon" runat="server" />下面是用戶控件顯示程序中所使用的用戶控件的具體內(nèi)容:Header.ascx(Header用戶控件)<Script Language="C#" Runat="Server">private void AdCreated(Object src,AdCreatedEventArgs e)lblAdText.Text = e.AlternateText;</script>&l

22、t;asp:AdRotator id="ad" AdvertisementFile=".AdBannersad.xml" BorderWidth="0" OnAdCreated="AdCreated" runat="server" /><br>當前廣告鏈接:<asp:Label id="lblAdText" ForeColor="red" runat="server" />Logon.ascx(Logon用

23、戶控件)/事件處理private void Submit_Click(Object sender,EventArgs e)SqlConnection MyConn = new SqlConnection(strConnString);MyConn.Open();string strUserName,strPassword,strSelect;strUserName = tbUserName.Text;strPassword = tbPasswd.Text;strSelect = "select * from bbs_user where id='"+strUserN

24、ame+"' and password='"+strPassword+"'"SqlCommand MyComm = new SqlCommand(strSelect,MyConn);SqlDataReader dr = MyComm.ExecuteReader();if(dr.Read()/登陸成功lblMsgShow.Text = "登陸成功"Session"UserName" = dr"id".ToString();Session"Purview"

25、 = dr"purview".ToString();else/登陸不成功lblMsgShow.Text        = "登陸不成功"dr.Close();MyConn.Close();</script><table><tr><td colspan="2" align="center"><b>登陸窗口</b></td></tr><tr

26、><td colspan="2" align="center"><asp:Label id="lblMsgShow" ForeColor="red" runat="server" /></td></tr><tr><td>用戶名:</td><td><asp:TextBox id="tbUserName" runat="server" /><

27、/td></tr><tr><td>密碼:</td><td><asp:TextBox id="tbPasswd" TextMode="Password" runat="server" /></td></tr><tr><td><asp:Button id="btnSubmit" Text="登陸" OnClick="Submit_Click" run

28、at="server" /></td></tr></table>Footer.ascx(Footer用戶控件)<Script Language="C#" Runat="Server">private void Page_Load(Object src,EventArgs e)if(Session"UserName"!=null)lblUserName.Text = (string)Session"UserName"lblPurview.Tex

29、t = (string)Session"Purview"</script>用戶名:<asp:Label id="lblUserName" Font-Name="Arial" ForeColor="red" Text="游客" runat="server" />權(quán)限:<asp:Label id="lblPurview" Font-Name="Arial" Text="無" ForeColo

30、r="red" runat="server" />每個控件包含有自已的顯示代碼以及相應的程序代碼。我們可以將一些常用的功能制作成為固定的用戶控件,當需要時,我們就可直接拿來使用,而不需要使用煩人的Crtl+C,Ctrl+V來"復制"、"粘貼"長長的一大堆代碼。用戶控件不僅做到了程序代碼與頁面構(gòu)架的分離,而且還增加了代碼重用性。3 自定義控件(Custom Control)用戶控件是很不錯的選擇,但是由于每個用戶控件都是一個ascx文件,當這些控件很多時,它們的使用就顯得比較零亂。此時我們便想可不可以將一些比較

31、相似的控件整合起來,在程序中只需要引用一次,便全部搞定。這是個很不錯的想法,我們把這個想法說得更加專業(yè)一些:"將多個類(class)導入同一個命名空間(namespace)"。呵呵,怎么樣,這句話是不是有點有耳熟?大家快去查一查Server控件的定義,是不是發(fā)現(xiàn)這句話是.我們下面就要接觸如何寫Server控件。編寫Server控件并不是一件輕松容易的事情,需要對.Net平臺有比較深的了解,適合于高級用戶,因此這里本人也不會具體描述Server控件的編寫步驟(要細細講這個,非得寫書不可)。請大家比較一下自定義控件源代碼與用戶控件的區(qū)別,作一些大致的了解:  

32、;   ce aspcn /首先是Headerpublic class Header:Control,INamingContainerprivate AdRotator ad;private Label lblAdText;public string UserNamegetreturn _UserName;set_UserName = value;public string Purviewgetreturn _Purview;set_Purview = value;public Footer()_UserName = "游客"_Purview = "無"上面和程序是將需要實現(xiàn)的功能,全部導入了自定義控件。程序中可以看到,在aspcn命名空間中包含三個類(Header,Logon,Footer),這三個類正是構(gòu)架三個主體部分。要使用自定義控件     ,還必須將原代碼進行編譯。C#程序編譯指令的用法,本人在此也不再重復。需要注意的是編譯的文

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論