期刊VIP學術指導 符合學術規范和道德
保障品質 保證專業,沒有后顧之憂
摘要:ASP.NET是.NET FrameWork的一部分,是一項微軟公司的技術,是一種使嵌入網頁中的腳本可由因特網服務器執行的服務器端腳本技術,它可以在通過HTTP請求文檔時再在Web服務器上動態創建它們。文章發表在《中國信息技術教育雜志》上,是畢業研究生論文范文,供同行參考。
關鍵詞:ASP.Net,程序構架,程序代碼,代碼分離
ASP .NET的前身ASP技術,是在IIS2.0上首次推出(Windows NT 3.51),當時與 ADO 1.0 一起推出,在IIS 3.0 (Windows NT 4.0)發揚光大,成為服務器端應用程序的熱門開發工具,微軟還特別為它量身打造了VisualInter Dev開發工具,在1994年到2000年之間,ASP技術已經成為微軟推展Windows NT 4.0平臺的關鍵技術之一,數以萬計的ASP網站也是這個時候開始如雨后春筍般的出現在網絡上。
一年前,當本人拿到一個名叫TWIG的PHP程序時,立即被作者OOP編程思想所折服,很難想像TWIG中所有的功能(行事歷、郵件、個性化)均在一個PHP文件(index.php3)中執行完成,這就得益于作者采用了程序代碼與頁面構架分離的思想,但是我也看到盡管作者做了很大的努力,但由于PHP的局限性,程序并沒有真正做到代碼與構架的分離。
index.php3這個主文件由于要執行的功能太多,所以其require的模塊文件相當之多,至使整個文件依然顯得十分零亂,本人愚昧,當時花了半個月的時間,才真正明白程序的構架,分析代碼之苦,無人能知啊(黯然淚下......)。
TWIG程序對我此后的編程有著很大的影響,但是即使這樣的作品,依然沒有擺脫程序代碼與HTML代碼混雜的局面。
程序代碼與頁面構架的分離是WEB程序員多年的夢想。在A.Net出現之前,無論是A、PHP還是J,程序代碼與HTML代碼都是混雜在一起的,這種做法,雖然在WEB技術初期受到贊揚,但是隨著時間的的推移,它的弊端是越來越明顯,當程序代碼很長時,HTML代碼與其混雜,程序的可讀性變得很差,讓人無法分清程序真正要表示的頁面構架。
而新技術A.Net則通過Codebehind、用戶控件(UserControl)以及自定義控件(CustomControl)等方法真正做到了代碼的分離。這是一個了不起的進步,大家可以在本文中看到分離代碼后的A.Net程序的結構是多么的清晰。
為了便于理解,這里設計的頁面比較簡單,頁面分為三個主要的部分,頭部包含一個AdRotator控件(用于顯示廣告)與一個Label控件(用于顯示當前廣告鏈接地址);中部是一個登陸頁面,包括兩個TextBox控件(分別用于輸入用戶名與密碼)、一個Label控件(顯示登陸是否成功)與一個Button控件(作為提交按鈕);底部包含兩個Label控件(分別顯示當前用戶名與用戶權限)。
熟悉A.Net的朋友,馬上就會意識到頭部由于使用了AdRotator控件,所以必定存在OnAdCreated事件以便在Label控件顯示相應鏈接;而中部由于使用Button控件做為提交按鈕,所以必定有一個OnClick事件處理。
1CodeBehind
首先我們就看看如何使用CodeBehind方法來實現代碼與頁面構架的分離,下面給出的源程序是主A.Net程序--Example1.ax:
當前廣告鏈接:
用戶名:
密碼:
用戶名:
權限:
例程中,大家可以清楚地看到程序中不包含任何C#、VB、javascript來處理OnAdCreated與OnClick事件,但是執行本程序,程序能夠正常使用(如圖2-1與圖2-2)。這便是使用CodeBehinde的結果,事件處理已經被轉移到其它程序中定義執行。請大家注意本例中第一行的信息:
一般在A.Net程序中,Page指令都在設定本程序應當使用什么語言(使用Language屬性),而本例中沒有出現Language屬性,而是出現了兩個新的Page屬性:Src與Inherits。Src屬性設定事件處理真正的代碼位置,Inherits屬性則設定需要引入的類名。可以看到本例中定義事件處理的文件是EventHandle.cs,我們來看看它的具體內容:usingystem;
usingystem.Data;
usingystem.Data.SqlClient;
usingystem.We
usingystem.Web.UI;
usingystem.Web.UI.WebControl
usingystem.Web.UI.HtmlControl
進行事件處理是定義在一個類中的(本例中是Acn,注意大小寫),由于需要與WeForms相關聯,所以此類還必須繼承Page類。
分析程序,大家可以看到程序中對事件的處理操作是與普通的未進行代碼分離的程序是一樣的,并沒有什么特別的地方。(本人在程序中已經給出的相關注釋,相信對大家理解程序有所幫助)
使用CodeBehind技術后,大家需要多寫一些代碼,比如聲明控件等,也許大家很不喜歡多寫這樣的代碼,但是大家也必須看到使用了CodeBehind技術后,主程序的可讀性大大增加了。在Example1.ax中相信大家很快就可以區分頁面構架的各個部分,大家想想這些構架如果在其它技術是否能看得如此清楚?
(這里的程序只做演示用,呵呵,大家可不要抓我什么引號漏洞這些小辮子喲)
2用戶控件(UserControl)
CodeBehind技術真正實現了代碼與構架的分離,比以前的技術前進了一大步,但是它的缺陷也是顯而易見的,比如主頁面中部那個登陸區,如果內容很多,HTML顯示代碼的依然會占用很大的區域,程序的可讀性依然會降低。
A.Net也提供了解決辦法,這就是用戶控件。
用戶控件我們可以將其視為不用編譯的Server控件。即然是控件,那么就肯定會遵從控件的使用方法。我們將Example1.ax中的每個Panel整體看成為一個控件,因此Example1.ax的主體部分通過使用用戶控件便可以減少為只有三行:
執行這個程序,其運行結果與使用CodeBehind技術的結果是一樣的,但是現在的A.Net程序更加容易區分頁面構架了。
nameace表示定義的命名空間,cla則是相應的類名,具體的使用例子有:
privatevoidAdCreated(Objectrc,AdCreatedEventArge)
{
lblAdText.Text=e.AlternateText;
}
當前廣告鏈接:
SqlCoectioMyCo=ewqlCoection(strCotring);
MyCo.Open();
stringtrUserName,strPaword,strSelect;
//登陸不成功
用戶名:
權限:" "當前廣告鏈接為:"));
//加入Label控件
lblAdText=ewLabel();
//添加HTML標簽
this.Controls.Add(newLiteralControl("//添加MsgShowLabel控件文秘114版權所有
lblMsgShow=ewLabel()
//登陸不成功
上面和程序是將需要實現的功能,全部導入了自定義控件。程序中可以看到,在acn命名空間中包含三個類(Header,Logon,Footer),這三個類正是構架三個主體部分。
要使用自定義控件,還必須將原代碼進行編譯。
csc/t:library/out:acn.dll/r:System.Data.dll,System.Web.dll,System.Drawing.dllCustomControls.cs
C#程序編譯指令的用法,本人在此也不再重復。需要注意的是編譯的文件名,必須與控件中nameace的名字一致。
編譯后的dll,仍然不能使用,我們必須將其放到.Net平臺中最著名的目錄--/bin中,bin目錄(如果不存在,可以自行建立)存放的是當前虛擬目錄中所有使用自定義控件以及組件,CLR在執行A.Net程序時會自動搜索此目錄中的文件,以找到與A.Net程序相匹配的Nameace、Cla以及Aembly。
當我們將程序編譯好的acn.dll放入/bin目錄后,這個自己編寫的Server控件便可以使用了。
(需要聲明一下,由于編寫Server控件時不能使用Seion等變量,以至無法做到兩個cla之間的通信,因此在缺省狀態下Footer控件并不能像前面的程序一樣隨Seion內容發生改變,不過可以通過普通操作Server控件的方法來操作相應的屬性達到相同的效果,此處為節約版面,未采用)
下面再來看看主體WeForm的程序內容:
怎么樣,相當簡單明了吧。
引用我們自定義的控件,也相當簡潔,只需將Register指令的TagPrefix、Nameace、Aembly屬性全部設定為acn。
至此,A.Net中三種代碼與頁面構架分離的方法已經介紹完畢。
三種方法各有優劣,本人比較傾向于使用用戶控件與CodeBinde技術結合使用,因為他們均不需要編譯,相對來說更容易使用,如果您要保護你的代碼,自定義控件則當然是您最佳的選擇。
畢業論文學術期刊網雜志推薦:《中國信息技術教育雜志》創刊于2000年,《中國信息技術教育》雜志是國家新聞出版總署批準的海內外公開發行的國家級刊物。是中華人民共和國教育部主管、中央電化教育館主辦的一份大型教育科研期刊,國內外公開發行。本刊為半月刊,主編:李維福。國內統一刊號:CN11-5678/TP,國際刊號:ISSN1674-2117。