大型網(wǎng)站設(shè)計服務(wù)器端動態(tài)主設(shè)計_第1頁
大型網(wǎng)站設(shè)計服務(wù)器端動態(tài)主設(shè)計_第2頁
大型網(wǎng)站設(shè)計服務(wù)器端動態(tài)主設(shè)計_第3頁
大型網(wǎng)站設(shè)計服務(wù)器端動態(tài)主設(shè)計_第4頁
大型網(wǎng)站設(shè)計服務(wù)器端動態(tài)主設(shè)計_第5頁
已閱讀5頁,還剩76頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

可修改歡迎下載精品Word可修改歡迎下載精品Word可修改歡迎下載精品Word第七章大型網(wǎng)站設(shè)計——效勞器端動態(tài)主頁設(shè)計通過前面各章的介紹,相信大家已經(jīng)對網(wǎng)頁設(shè)計已經(jīng)有一個完整的認識了。對于建立一個個人或者小型網(wǎng)站來說,利用前面給大家介紹的各種技術(shù)和工具就已經(jīng)能夠建立一個圖文并茂,動態(tài)十足的網(wǎng)站了。但是,對于一個大型或者商業(yè)網(wǎng)站來說,這些技術(shù)只能夠提供Web頁面的建立和在靜態(tài)Web頁面的根底上進行的簡單動態(tài)交互,而大型或者商業(yè)網(wǎng)站的設(shè)計除了會關(guān)注網(wǎng)頁所呈現(xiàn)給用戶的外觀,它們更加關(guān)注網(wǎng)站的信息發(fā)布、信息收集以及信息處理的能力,而這些能力使用前面所介紹的技術(shù)是無法獲得的,因此計算機技術(shù)人員就開發(fā)出了各種效勞器端動態(tài)主頁設(shè)計技術(shù)來完成這些功能。通過本章的學(xué)習(xí),應(yīng)掌握以下內(nèi)容:·ASP.NET的特點及環(huán)境搭建·ASP.NET的WebForm的應(yīng)用·ASP.NET的數(shù)據(jù)庫編程的應(yīng)用·ASP.NET的會話控制的應(yīng)用7.1效勞器端動態(tài)主頁設(shè)計概述7.1.1效勞器端動態(tài)技術(shù)的誕生隨著Internet應(yīng)用的深入,Web技術(shù)引入的新的商機也逐漸為人們所注意。但是由于當(dāng)時的Web技術(shù)缺乏對交互和信息動態(tài)更新的支持,阻礙的Web技術(shù)在商業(yè)領(lǐng)域的應(yīng)用。為了突破這種局限,計算機科學(xué)家進行了很多種嘗試,提出了很多種對Web技術(shù)進行信息交互功能擴展的技術(shù),其中最早投入使用并迅速成為主流技術(shù)的是“通用網(wǎng)關(guān)接口〔CGI〕〞技術(shù),它的全稱是CommonGatewayInterface,它的出現(xiàn)令Web技術(shù)擁有了強大的交互能力,并且擴展了WWWServer的功能,例如WWWServer和數(shù)據(jù)庫管理系統(tǒng)〔DBMS〕交互的能力、WWWServer運行效勞器進程的能力等。這些擴展加速了Web技術(shù)在商業(yè)上的應(yīng)用,并且促進了各種大型網(wǎng)站的誕生。CGI技術(shù)在其誕生之初以其強大的功能成為90%大型網(wǎng)站首選的構(gòu)建技術(shù),但是通過使用人們發(fā)現(xiàn)CGI技術(shù)存在兩個致命的問題。首先,由于CGI技術(shù)提供了WWWServer效勞器和主機程序的交互能力,也使CGI技術(shù)存在比較嚴重的平安問題,惡意黑客可以通過CGI技術(shù)的漏洞控制效勞器并造成效勞的癱瘓和數(shù)據(jù)的損失;其次,CGI技術(shù)需要為每一次訪問建立一個進程來完成對CGI腳本的處理,如果網(wǎng)站的訪問量比較大,那么這種處理方式將嚴重影響網(wǎng)站的性能。由于這些問題的存在,各大軟件廠商都紛紛推出新的技術(shù)來替代CGI技術(shù),其中比較有影響力的包括PHP、JSP和ASP等等,其中又以MicroSoft公司推出的ASP技術(shù)使用最廣泛。2000年秋天,MicroSoft公司推出了ASP技術(shù)的升級版——ASP.NET技術(shù),本章將通過對ASP.NET技術(shù)的介紹,幫助同學(xué)們了解和掌握一種效勞器端編程技術(shù),擁有建立大型網(wǎng)站的能力。1.ASP技術(shù)的歷史在講述ASP.NET歷史之前,首先來回憶一下ASP。ASP的第一個版本是0.9測試版。它給WEB開發(fā)帶來一陣暴風(fēng),它能夠?qū)⒋a直接嵌入HTML,使得設(shè)計WEB頁面變得更簡單,更強大,并且通過內(nèi)置的組件能夠?qū)崿F(xiàn)強大功能,最明顯的就是ActiveXDataObjects〔ADO〕,它使得建立一個動態(tài)頁面如小孩子玩游戲一樣簡單。最終出場的是ActiveServerPage1.0,它做為IIS的附屬產(chǎn)品免費發(fā)送。并且不久就在Windows平臺上廣泛使用。ASP與ADO的結(jié)合使用開發(fā)者很容易地在一個數(shù)據(jù)庫中建立和翻開一個記錄集。這不無疑是它如此快就被群眾接受的因素,因為你現(xiàn)在能使用這些腳本建立和翻開一個記錄集,處理和輸出任何數(shù)據(jù),以任何順序,幾乎只要你能想到的,它就能完成。1998年,微軟公司又發(fā)布了ASP2.0。ASP1.0和ASP2.0主要區(qū)別是外部的組件需要實例化。有了ASP2.0和IIS4.0,我們就有可能建立ASP應(yīng)用了,而且每個組件就有了自已單獨的內(nèi)存空間。內(nèi)置的MicroSoftTransactionServer〔MTS〕也使用制做組件便得簡單。微軟公司接著開發(fā)了Windows2000操作系統(tǒng)。這個Windows版本給我們帶上了IIS5.0以及ASP3.0。此次并不是簡單對ASP進行補充,核心的不同實際上是把很多的事情交給了COM來做。在windows2000中,微軟結(jié)合了MTS與COM核心環(huán)境做出了COM+,這就讓主機有了一種新的方法來使用組件,同樣給主機帶來了更多的穩(wěn)定性,成了一個可以升級的效率高的工作平臺。IIS5.0在外表上似乎沒有改什么,但是在接口上動的手術(shù)比較大。在內(nèi)部,它使用COM+組件效勞來對組件提供一個更好的執(zhí)行的環(huán)境。有了這些,微軟公司推出了ASP.NET,ASP.NET又叫ASP.NET,他不是ASP的簡單升級,而是MicroSoft推出的新一代ActiveServerPages。ASP.NET是微軟開展的新的體系結(jié).NET的一局部,其中全新的技術(shù)架構(gòu)會讓每個人的編程生活變得更的簡單7.1.2MicroSoft.NET與ASP.NET2000年秋天,IT業(yè)巨頭——MicroSoft公司發(fā)布了其以網(wǎng)絡(luò)為核心的新的技術(shù)框架——MicroSoft.NET技術(shù)框架,說明微軟將以網(wǎng)絡(luò)為中心,徹底轉(zhuǎn)換產(chǎn)品研發(fā)、發(fā)布的方式,改變產(chǎn)品和效勞的范圍。在MicroSoft.NET技術(shù)框架中,ASP.NET技術(shù)是其中的一個最主要的組成局部之一,它是ASP的下一代版本,然而ASP.NET又并非從ASP3.0自然演化而來,在許多方面,ASP.NET與ASP有著本質(zhì)的不同。ASP.NET完全基于模塊與組件,具有更好的可擴展性與可定制性,數(shù)據(jù)處理方面更是引入了許多沖動人心的新技術(shù),正是這些具有革新意義的新特性,讓ASP.NET遠遠超越了ASP,同時也提供給WEB開發(fā)人員更好的靈活性,有效縮短了WEB應(yīng)用程序的開發(fā)周期。ASP.NET與Windows2000Server/AdvancedServer的完美組合,為中小型乃至企業(yè)級的web商業(yè)模型提供了一個更為穩(wěn)定,高效,平安的運行環(huán)境。要了解ASP.NET的真實面目,首先就得了解一下微軟.NET戰(zhàn)略。1.Microsoft.NET的歷史隨著網(wǎng)絡(luò)經(jīng)濟的到來,微軟公司希望幫助用戶,能夠在任何時候、任何地方、利用任何工具都可以獲得網(wǎng)絡(luò)上的信息,并享受網(wǎng)絡(luò)通信所帶來的快樂。.NET戰(zhàn)略就是為著實現(xiàn)這樣的目標而設(shè)立的。微軟公開宣布,今后將著重于網(wǎng)絡(luò)效勞和網(wǎng)絡(luò)資源共享的開發(fā)工作,并稱,將會為公眾提供更加豐富、有用的網(wǎng)絡(luò)資源與效勞。微軟新一代平臺的正式名稱叫做“新一代Windows效勞〞〔NGWS〕,現(xiàn)在微軟已經(jīng)給這個平臺注冊了正式的商標——MicroSoft.Net。在.Net環(huán)境中,微軟不僅僅是平臺和產(chǎn)品的開發(fā)者,并且還將作為架構(gòu)效勞提供商、應(yīng)用程序提供商,開展全方位的Internet效勞。在談及這個平臺中使用的新技術(shù),微軟透露,它將在.Net環(huán)境中提供更多新產(chǎn)品和一攬子的全套效勞。MicroSoft.NET平臺的根本思想是:側(cè)重點從連接到互聯(lián)網(wǎng)的單一網(wǎng)站或設(shè)備上,轉(zhuǎn)移到計算機、設(shè)備和效勞群組上,使其通力合作,提供更廣泛更豐富的解決方案。用戶將能夠控制信息的傳送方式、時間和內(nèi)容。計算機、設(shè)備和效勞將能夠相輔相成,從而提供豐富的效勞,而不是像孤島那樣,由用戶提供唯一的集成。企業(yè)可以提供一種方式,允許用戶將它們的產(chǎn)品和效勞無縫地嵌入自己的電子構(gòu)架中。這種思路將擴展二十世紀八十年代首先由PC賦予的個人權(quán)限。MicroSoft.NET將開創(chuàng)互聯(lián)網(wǎng)的新局面,基于HTML的顯示信息將通過可編程的基于XML的信息得到增強。XML是經(jīng)“萬維網(wǎng)聯(lián)盟〞定義的受到廣泛支持的行業(yè)標準,Web瀏覽器標準也是由該組織創(chuàng)立的。微軟公司為開發(fā)它投入了大量精力,但它并不是MicroSoft的專有技術(shù)。XML提供了一種從數(shù)據(jù)的演示視圖別離出實際數(shù)據(jù)的方式。這是新一代互聯(lián)網(wǎng)的關(guān)鍵,提供了開啟信息的方式,以便對信息進行組織、編程和編輯;可以更有效地將數(shù)據(jù)分布到不同的數(shù)字設(shè)備;允許各站點進行合作,提供一組可以相互作用的“Web效勞〞。MicroSoft.NET綜述MicroSoft.NET平臺包括用于創(chuàng)立和操作新一代效勞的.NET根底結(jié)構(gòu)和工具;可以啟用大量客戶機的.NETUserExperience;用于建立新一代高度分布式的數(shù)以百萬計的.NET積木式組件效勞;以及用于啟用新一代智能互聯(lián)網(wǎng)設(shè)備的.NET設(shè)備軟件。MicroSoft.NET產(chǎn)品和效勞—包括Windows.NET,連同建立積木式效勞的核心集成套件;MSNTM.NET;個人訂購效勞;Office.NET;VisualStudio.NET;以及用于.NET的bCentralTM。.Net環(huán)境中的突破性改進在于:1.使用統(tǒng)一的Internet標準〔如XML〕將不同的系統(tǒng)對接;2.這是Internet上首個大規(guī)模的高度分布式應(yīng)用效勞架構(gòu);3.使用了一個名為“聯(lián)盟〞的管理程序,這個程序能全面管理平臺中運行的效勞程序,并且為它們提供強大的平安保護后臺;.NET平臺包括如下組件:1.用戶數(shù)據(jù)訪問技術(shù)。其中包括一個新的基于XML的、以瀏覽器為組件的混合信息架構(gòu),叫做“通用畫板〞;2.基于WindowsDNA2000的構(gòu)建和開發(fā)工具;3.一系列模塊化的效勞,其中包括認證、信息傳遞、存儲、搜索和軟件送遞功能;4.一系列驅(qū)動客戶設(shè)備的軟件;2.什么是ASP.NET?本節(jié)將詳細介紹稱為ActiveServerPages+〔ASP.NET〕的網(wǎng)絡(luò)應(yīng)用程序可編程模板。建立在Microsoft.NET框架上網(wǎng)絡(luò)應(yīng)用程序共享一個通用應(yīng)用程序模板。在這個模型中,網(wǎng)絡(luò)應(yīng)用程序是一套起源于基URL的URLs。因此它包含用于生成在瀏覽器中觀看的網(wǎng)頁的網(wǎng)絡(luò)應(yīng)用程序和網(wǎng)絡(luò)效勞。如同名字所述,ASP.NET是由活動效勞器頁面〔ASP〕開展而來。ASP.NET利用commonlanguageruntime和效勞框架網(wǎng)絡(luò)應(yīng)用程序提供了一個可靠的、自動化的、可擴展的主機環(huán)境。ASP.NET也受益于commonlanguageruntime集成模板,簡化了應(yīng)用程序的配制。另外,它提供簡化應(yīng)用程序開發(fā)的效勞〔如狀態(tài)管理效勞〕以及高水平的編程模板〔如ASP.NETWebForms和ASP.NETWebServices〕。ASP.NET的核心是運行語言,一個高性能的用于處理基于低級結(jié)構(gòu)的請求的運行語言,而基于的結(jié)構(gòu)與MicroSoftInternetInformationServices〔IIS〕所提供的ISAPI結(jié)構(gòu)相似。運行語言是在象效勞器上的IIS或客戶機上的IE之類的unmanaged主機過程中運行的受控代碼。runtime負責(zé)處理引入的所有請求,并對每個請求應(yīng)用程序的URL進行解析,然后把請求分配到應(yīng)用程序以進行進一步的處理。運行語言是多線程的,并異步處理請求,因此劣質(zhì)的應(yīng)用程序代碼阻礙不了它對新請求的處理。而且運行語言假定失敗必會發(fā)生,因此它被控制為盡最大力量自動地從訪問沖突、內(nèi)存泄漏、死鎖等事故中恢復(fù)過來。除非是硬件故障,運行語言的目標是100%的可靠性。網(wǎng)絡(luò)根本上是一個無狀態(tài)模型,并且在請求間沒有聯(lián)系,這使得編寫網(wǎng)絡(luò)應(yīng)用程序很困難,因為應(yīng)用程序通常需要維護跨多個請求的狀態(tài)。ASP.NET增強了由ASP引入的狀態(tài)管理效勞,以便為網(wǎng)絡(luò)應(yīng)用程序提供三種類型的狀態(tài):應(yīng)用程序、會話、用戶。就象在ASP中一樣,應(yīng)用程序狀態(tài)特定于一個應(yīng)用程序?qū)嵗?,并且不會持久。會話狀態(tài)是特定于一個用戶與應(yīng)用程序間的會話的。與ASP會話狀態(tài)不同,ASP.NET會話狀態(tài)儲存在一個獨立的過程中,并且可把它配制成可以儲存到一個獨立的機器上。這使得會話狀態(tài)當(dāng)應(yīng)用程序在網(wǎng)絡(luò)群〔Webfarm〕擴展時非常有用。用戶狀態(tài)類似于會話狀態(tài),但通常它不會超時,并且是永久性的。因此,用戶狀態(tài)對儲存用戶參數(shù)和其它個性化的信息是有用的。所有狀態(tài)管理效勞都被實現(xiàn)為模塊,因此它們?nèi)菀自黾拥綉?yīng)用程序管道中,或從中刪除。如果除了由ASP.NET提供的效勞外,還需要額外的狀態(tài)管理效勞,那么可由第三方的模塊提供。ASP.NET同樣提供高速緩沖效勞,以改善性能。輸出緩沖可完全節(jié)省網(wǎng)頁翻譯,段緩沖儲存局部的網(wǎng)頁。由于提供了相應(yīng)的類,所以只要需要,應(yīng)用程序、模塊以及請求處理程序可以在高速緩存中儲存任意數(shù)量的對象。7.1.3ASP.NET的組成ASP.NET應(yīng)用程序可編程模板主要是有兩個高級可編程模塊構(gòu)成,下面就簡單介紹一下這兩個高級可編程模塊,它們分別是:ASP.NET網(wǎng)絡(luò)表單〔WebForm〕和ASP.NET網(wǎng)絡(luò)效勞〔WebService〕。1.ASP.NET網(wǎng)絡(luò)表單網(wǎng)絡(luò)表單把基于VisualBasic?的表單的高生產(chǎn)性的優(yōu)點帶到了網(wǎng)絡(luò)應(yīng)用程序的開發(fā)中來。網(wǎng)絡(luò)表單支持傳統(tǒng)的將HTML內(nèi)容與角本代碼混合的ASP語法,但是它提出了一種將應(yīng)用程序代碼和用戶接口內(nèi)容別離的更加結(jié)構(gòu)化的方法。引入的網(wǎng)絡(luò)表單控件用于為封裝通用用戶接口元素提供了一種機制。這些新的特點使得開發(fā)工具在支持VB小應(yīng)用程序的同時,也支持設(shè)計時模塊,使得WUSIWYG工具支持網(wǎng)頁布局。網(wǎng)絡(luò)表單控件負責(zé)生成用戶接口,典型情況是在HTML表單中。ASP.NET是提供了一套映射傳統(tǒng)的HTML用戶接口小部件〔包括列表框,文本框和按鈕〕的網(wǎng)絡(luò)表單控件和一套附加的更加復(fù)雜的網(wǎng)絡(luò)控件〔如日歷和廣告轉(zhuǎn)板〕。這些控件的一個重要特點是,它們可以被編寫以適應(yīng)客戶端的能力;同一網(wǎng)頁把大范圍的客戶端平臺和表單因素作為目標。換句話說,網(wǎng)絡(luò)表單控件能“嗅〞到正在查找表單的客戶,然后返回適宜的用戶經(jīng)驗――可能是適合低級瀏覽器的HTML3.2或是適于IE5.0的動態(tài)HTML??紤]到網(wǎng)絡(luò)是一種無狀態(tài)的聯(lián)接模型,網(wǎng)絡(luò)應(yīng)用程序開發(fā)人員所面臨的一個很復(fù)雜的問題是,他們要對用戶與基于網(wǎng)絡(luò)的接口的交互作用作出反響。網(wǎng)絡(luò)利用ASP.NET的體系架構(gòu)提供了一套豐富的效勞,以幫助開發(fā)人員建立交互式網(wǎng)頁。這些效勞的凈作用是使基于組件的、事件驅(qū)動的可編程模塊,對開發(fā)人員來說,非常象客戶端的表單程序設(shè)計。用戶與網(wǎng)頁交互作用的狀態(tài)管理的復(fù)雜性被ASP.NET網(wǎng)絡(luò)表單和網(wǎng)絡(luò)表單控件隱藏起來了。對開發(fā)人員來說,提供的豐富數(shù)據(jù)綁定效勞使得顯示通過數(shù)據(jù)訪問效勞得到的數(shù)據(jù)變得非常容易。代碼與內(nèi)容的別離使ASP.NET網(wǎng)頁能動態(tài)地編譯到受控類中,用以提高性能。每個引入的請求都被傳遞到一個新的網(wǎng)頁實例,因此開發(fā)人員不需要關(guān)心代碼中的線程平安性。2.ASP.NET網(wǎng)絡(luò)效勞ASP.NET網(wǎng)絡(luò)效勞體系架構(gòu)為用ASP.NET建立網(wǎng)絡(luò)效勞提供了一高級可編程模板。雖然建立網(wǎng)絡(luò)效勞并不需要使用網(wǎng)絡(luò)效勞平臺,但是它提供許多的優(yōu)點將簡化開發(fā)過程,并且它使用的編程模型對用ASP或VB工作的開發(fā)人員來說是很熟悉的。使用這個可編程模型,開發(fā)人員不需要理解、SOAP或其它任何網(wǎng)絡(luò)效勞標準。開發(fā)人員用ASP.NET生成一個擴展名為.asmx的文件,并把此文件配制為網(wǎng)絡(luò)應(yīng)用程序的一局部,就建立起了一個網(wǎng)絡(luò)效勞。ASMX文件或者包含對在其它地方定義的受控類的引用,或者包含這個類的定義。這個類是由ASP.NET提供的WebService類所派生。公有的類方法在標記上WebMethod屬性后,就會成為網(wǎng)絡(luò)效勞方法,把請求發(fā)送到ASMX文件中的URL后,這些方法就會被調(diào)用。你不必手工為你的網(wǎng)絡(luò)效勞建立一個契約。當(dāng)被調(diào)用者請求時,ASP.NET檢查類的元數(shù)據(jù),以自動生成SCL文件??蛻艨赏ㄟ^SOAP,GET和POST提交請求。對方法和參數(shù)進行編碼的約定是:對GET,將被編碼為查詢字符串;對POST,將被編碼為表單數(shù)據(jù)。GET和POST的機制不如SOAP有力,但是它們使得客戶在訪問網(wǎng)絡(luò)效勞時不必支持SOAP。ASP.NET網(wǎng)絡(luò)效勞模型假定了一個無狀態(tài)效勞結(jié)構(gòu)。無狀態(tài)結(jié)構(gòu)通常比有狀態(tài)結(jié)構(gòu)更具可擴展性。每次收到一個效勞請求后,就生成一個新對象,請求被轉(zhuǎn)化為一個方法調(diào)用,當(dāng)方法調(diào)用返回時對象被銷毀。如果這些效勞需要跨請求維護狀態(tài),那么它們將使用ASP.NET狀態(tài)管理效勞。基于ASP.NET的網(wǎng)絡(luò)效勞在網(wǎng)絡(luò)應(yīng)用程序模型中運行,因此它們得到了該模型的所有平安、配制和其它優(yōu)點。ASP.NET網(wǎng)絡(luò)效勞還提供了一個為在SCL文件中描述的網(wǎng)絡(luò)效勞生成分類的受控代理工具。代理生成器把SCL文件中描述的消息映射成受控類中的方法。代理對應(yīng)用程序代碼隱藏了所有的網(wǎng)絡(luò)和引導(dǎo)設(shè)備,因此使用網(wǎng)絡(luò)效勞看起來就象使用其它受控代碼一樣。代理將優(yōu)先使用SOAP鏈接網(wǎng)絡(luò)效勞,但是它同樣支持GET和POST機制。因此GET和POST同樣也能被使用。網(wǎng)絡(luò)效勞為在Internet上綁定應(yīng)用程序提供了一個利用現(xiàn)存體系架構(gòu)和應(yīng)用程序的簡單的、靈活的、基于許多標準的模型。網(wǎng)絡(luò)應(yīng)用程序很容易與當(dāng)?shù)亻_發(fā)的效勞或已存在的效勞集成在一起,而不用考慮開發(fā)平臺、開發(fā)語言或使用的對象模型,以用于實現(xiàn)任何組成的效勞或應(yīng)用程序。7.1.4ASP.NET的開發(fā)語言1.ASP.NET的開發(fā)語言簡介JScript.NET、C#.NET、VisualC++.NET,甚至Delphi。越來越多的語言也都參加到了Microsoft.NET陣營中,使用各種語言開發(fā)的ASP.NET應(yīng)用,在接受用戶訪問的時候,將首先被轉(zhuǎn)換成在.NET平臺的CLR,然后對代碼進行執(zhí)行。在這些語言中C#.NET是微軟公司推薦進行ASP.NET開發(fā)的語言,C#是一種面向?qū)ο笳Z言,這種語言的語法類似于C和C++語言,又融入了Java語言的優(yōu)點,保存了開發(fā)這熟悉的C語言的語法,又解決了C語言平安性難以控制的問題。在本書的所有實例的開發(fā)中,也將使用C#作為開發(fā)語言,讀者可以在實際的應(yīng)用過程中舉一反三,使用自己熟悉的語言進行ASP.NET的開發(fā)。2.C#.NET簡介C#語言是微軟公司針對.Net平臺開發(fā)的一種全新的編程語言。盡管C#象是C,和C++語言的升級語言,但是他不象他的前身那樣,C#是一個完全面向?qū)ο蟮拈_發(fā)語言。它既有VisualBasic的快速開發(fā)的特點,又具有C++的強大的功能。它的風(fēng)格類似與C、C++和Java。如果你是一個C、C++或者Java的程序員,你會發(fā)現(xiàn)你可以很快的使用C#進行開發(fā)。和VB.NET一樣,C#可以利用公共語言運行時給我們帶來的各種好處。例如:語言的交互性,垃圾回收機制,增強的平安性能,以及版本兼容。C#是一種完全面向?qū)ο蟮拈_發(fā)語言,因此在C#中最根本的語法元素就是類。和其他的面向?qū)ο笳Z言一樣,類是一類具共同屬性和操作的對象的集合。一個類可以從另一個類繼承,在C#中,類是不可以繼承多個類的,但是它可以繼承多個接口。每一個類都是由其特有的屬性和方法構(gòu)成的,屬性用來保存這個類的對象相關(guān)的數(shù)據(jù),方法就是定義類的對象能夠執(zhí)行的操作,也就是對象的功能。和其他的面向?qū)ο笳Z言一樣,C#也提供了繼承,接口等其它面向?qū)ο蟮奶匦浴?.1.5小結(jié)7.2ASP.NET根底在本書接下來的內(nèi)容里,本書將利用實例詳細地給讀者介紹怎樣使用ASP.NET來進行效勞器端動態(tài)主頁的設(shè)計。7.2.1.NET的安裝與運行環(huán)境1.運行環(huán)境配置ASP.NET的調(diào)試環(huán)境操作系統(tǒng):Windows2000Professional,Windows2000Server,Windows2000AdvancedServer瀏覽器:IE5.5支持哪幾種語言ASP.NET目前能支持3種與語言,C#〔讀作"CSharp"〕,VisualBasic,andJscrip。使你的機器支持ASP.NET,必須滿足以下配置:硬件要求:1、CPU:IntelPentiumII300MHz〔最好IntelPentiumIII600MHz〕2、內(nèi)存:96MB〔最好128MB〕3、磁盤空間:250MB〔完全安裝〕155MB〔快速安裝〕4、顯示:800x600,256colors5、CD-ROM:required軟件要求:1、MicroSoftWindows2000+SP12、MicroSoftInternetExplorer5.53、IIS5.04、其它:MDAC2.6ASP.NET的安裝過程很簡單,只需按照簡單提示安裝即可。ASP.NET〔NGWSSDK〕的下載地址:://microsoft/downloads/details.aspx?FamilyID=262d25e3-f589-4842-8157-034d1e7cf3a3&displaylang=en安裝VS.NET版本的記得必須先安裝以下內(nèi)容:1、windows2000sp12、安裝IE5.53、必須要裝有iis,而且iiS要帶frontpage擴展4、frontpage效勞擴展的補丁QFE需要注意的是,如果在安裝IIS之前就已經(jīng)安裝好了VS.NETIDE的話,需要重新安裝MS.NETFramework才能在VS.NETIDE中創(chuàng)立ASP.NET應(yīng)用程序。2.運行VisualStudio.NETIDE環(huán)境微軟的VS.NETIDE〔IntegrationDesignEnvironment〕是一個非常豐富的變成環(huán)境,可以進行C#、VC++、VB.NET、ASPX等的編程,你甚至也可以編寫ASP文件。首先看到的是IDE,如圖1所示。VS.NETIDE看起來很熟悉,和低版本的VSIDE類似,它在低版本的VSIDE的根底上又有了新的提高。圖1VisualStudio.NET的IDE整體布局然而,IDE的變化絕非是外表性的。所有的.NET語言都使用同一個IDE,其中的新工具的功能是強大而全面的,用戶可以把任何一個設(shè)計窗口設(shè)定為自動隱藏〔就象Windows中的任務(wù)條一樣〕,這樣就可以使桌面顯得不太凌亂,如圖2所示:圖2右上角的“圖釘〞按鈕用來控制窗口自動隱藏主工作區(qū)是由一系列的標簽和窗口組成,也就是說IDE不會同時顯示許多的窗口或代碼模塊,在翻開對象的源代碼時,IDE就會在相應(yīng)對象的主區(qū)內(nèi)增加新按鈕。如圖1所示,WebForm1.aspx就是當(dāng)前翻開的代碼模塊。IDE中還有一個新的被稱作任務(wù)列表的窗口,其中的內(nèi)容包括你和IDE創(chuàng)立的工程。例如,如果在編譯一個VB工程時收到一個錯誤信息,VB就會在任務(wù)列表中創(chuàng)立一個條目來解釋這個問題。如圖1所示,最下方的窗口就是任務(wù)列表窗口。用戶還可以直接在任務(wù)列表中添加一個條目,或者通過在代碼中建立以"TODO:"開頭的注釋把代碼中的一個位置與任務(wù)聯(lián)系起來。任務(wù)清單是一個非常強大的工具,它能使開發(fā)者節(jié)約不少的時間,并有助于開發(fā)者能夠更好地調(diào)試自己的軟件。過去,VB隱藏了創(chuàng)立一個窗體所必需的全部工作。我們使用IDE創(chuàng)立一個窗體,并在Initialize事件處理程序中添加代碼,但對于發(fā)生在這兩者之間的過程那么無能為力。在VB.NET中,窗體成了一個類,包含創(chuàng)立窗體的全部代碼,一些高級開發(fā)人員可以通過這些代碼完成一些很"酷"的工作。代碼編輯器還包括一些新的特性,例如可以自動地對編輯的源代碼進行"縮進"處理,而且可以顯示源代碼的行號,如圖3所示:圖3VS.NETIDE將原本封閉的代碼開放出來在VS.NET的IDE中,提供了非常多便利的功能,幫助開發(fā)者快速平安的完成開發(fā)工作。想要完整地介紹VS.NETIDE的使用可能需要一本書的篇幅,因此,在這里就不詳細地介紹了,在本書后面的內(nèi)容里,會將各種常用的功能分別進行介紹。7.2.2名字空間〔namespace〕和ASP.NET的文件類型1.什么是名字空間〔namespace〕?對象一直是面向?qū)ο蟪绦蜷_發(fā)〔OOP〕的中心。在MicroSoft.NET中也不例外,MicroSoft.NET中的VB、VBA、VC++、VBScript等各種語言都是如此,不同的開發(fā)語言有不同的對象,這些對象均是各個語法所提供的的“資源〞,程序開發(fā)人員可以利用這些資源,來編寫所需的系統(tǒng),就相隔房屋的一樣,建筑師使用同樣的素材,然而蓋好的房子可能不盡相同。在過去的ASP中,僅有Server、Request、Response等七個對象。而在ASP.NET的對象庫中卻分得很細。例如在ASP.NET網(wǎng)頁中要通過SQL語句獲得數(shù)據(jù)庫中的數(shù)據(jù),必須使用“System.Data.sqlClient〞,這是NameSpace名稱。在System.Data.sqlClient下,又有很多類〔Class〕。每個Class可視為一個對象,因為Class下有屬性、方法和事件等所以,最上層的NameSpace是看作是同類型對象的集合,一個NameSpace之下可擁有多個Class。他們之間的關(guān)系如圖4所示,Namespace實際是一個具有緊密聯(lián)系的對象類型的集合,而Class代表了系統(tǒng)中的一個對象類型:ASP.NETNameSpaceASP.NETNameSpaceClass1NameSpaceClass2Class3Class42.如何應(yīng)用名字空間〔NameSpace〕?<%@ImportNamespace="System.Globalization"%>〔在ASPX文件中的書寫格式〕<%@ImportNamespace="DataEmployee"%>或者usingSystem.Data;〔在C#文件中的書寫格式〕usingSystem.Data.OldDb;以上表示在ASP.NET網(wǎng)頁中使用了四個NameSpace,接下來我們要申明變量,但此變量必須是已引用的四個NameSpace所屬的Class,如:OleDbConnectionMyConnection;OleDbDataSetCommandMyCommand;在上面的ASP.NET代碼中OleDbConnection及OleDbDataSetCommand類型都是名字空間之下的Class。3.ASP.NET中的文件類型?在ASP.NET中,相對于以前的ASP來說,增加了很多種文件類型,如表1所示,表1中的每一種文件擴展名就代表ASP.NET的一種文件類型:表1ASP.NET中的文件類型文件擴展名用途及說明Global.asaxASP.NET系統(tǒng)環(huán)境設(shè)置文件,進行應(yīng)用程序初始化的過程。.aspx內(nèi)含ASP程序代碼的文件,瀏覽器可執(zhí)行此類文件,向效勞器提出瀏覽請求.asmx制作WebService的原始文件.sdl制作WebService的XML格式的文件.vb或.cs在非ASP.NET環(huán)境下,執(zhí)行WebService的文件.aspc可重復(fù)使用在多個.aspx的文件,此文件內(nèi)可含有控件.ascx內(nèi)含UserControl的文件,可內(nèi)含在多個.aspx文件中7.2.3C#語言介紹由于篇幅的原因和C#本身與C++語言類似的特點,在本書中將不會對C#語言的語法進行詳盡的介紹。在本節(jié)的內(nèi)容里,將針對C#自身特殊的地方進行介紹。1.C#程序的根本結(jié)構(gòu)C#語言是從C和C++語言演變而來,是一種簡單、現(xiàn)代、面向?qū)ο蠛皖愋推桨驳木幊陶Z言。C和C++程序員會很快熟悉它。C#的目標是將Visual

Basic的高效率同C++原有的強大功能結(jié)合起來。在此將通過“HelloWorld〞程序講解C#語言的一些根本結(jié)構(gòu)。usingSystem;classHelloWorld{publicstaticvoidMain〔〕{

Console.WriteLine〔"HelloWorld"〕;

}}一個C#語言編寫的應(yīng)用程序具備的根本結(jié)構(gòu),即:名字空間、類、程序入口〔靜態(tài)Main方法〕。名字空間在前面已經(jīng)講過,它是同類型類的集合,要使用名字空間中的類,首先應(yīng)該在程序中引用名字空間。在C#中引用名字空間要使用“using〞關(guān)鍵字處理,而聲明自定義名字空間使用“namespace〞關(guān)鍵字處理。本例引用了系統(tǒng)類庫中“System〞名字空間,并且自定義名字空間名為“Hello〞。“usingSystem;〞類是描述一群具有相似特性〔屬性〕、相同行為〔方法〕與意義,且和其他對象間有共同關(guān)系的對象。類,通過實體化過程后成為對象,即一個真正可以用于應(yīng)用的程序。本例類名為“HelloWorld〞。Main方法是程序的入口點,程序控制在該方法中開始和結(jié)束。該方法在類的內(nèi)部聲明。作為程序入口點,由于該方法需要在類被實體化前存在,那么它必須為靜態(tài)的〔即采用static修飾〕。其中Main方法使用void修飾說明該方法不返回值。寫Main方法時既可以不使用參數(shù),也可以使用參數(shù)〔本例為不使用參數(shù)〕。在Main方法中可以創(chuàng)立對象及調(diào)用其他方法。Main方法是HelloWorld類的成員。它具有static修飾符,因此是Hello類的方法而不是此類的實例的方法在上面的例如中,還應(yīng)用到了Console類。Console類是.NETFramework專門為開發(fā)控制臺應(yīng)用程序封裝的一個類,其中包含了控制臺應(yīng)用程序所需的獲取標準輸入、輸出和錯誤流的操作。同時對從控制臺讀取、寫入字符和字符串的應(yīng)用程序提供根本支持。本例中使用了“WriteLine〞方法,即向控制臺中寫入字符串“HelloWorld〞。2.C#的類本章已經(jīng)提到,C#是一個完全的面向?qū)ο蟮木幊陶Z言,因此類可以說是C#程序中最主要的組成局部。和其他編程語言類似C#中的類是具有相同數(shù)據(jù)結(jié)構(gòu)和操作的對象的集合,它們同樣是一個對象的集合。下面的代碼將創(chuàng)立一個person類。publicclassperson{//在這里面可以增加屬性和方法。}現(xiàn)在給上面的person類增加一個姓名和年齡的屬性。publicclassperson{privatestring_Name;privateint_Age;publicstringName{get{return_Name;}set{_Name=Value;}}publicintAge{get{return_Age;}set{_Age=Value;}}}接下來給上面的類增加一個ToString〔〕的方法。publicclassperson{privatestring_Name;privateint_Age;publicperson〔〕{////TODO:Addconstructorlogichere//}publicstringName{get{return_Name;}set{_Name=Value;}}publicintAge{get{return_Age;}set{_Age=Value;}}publicstringToString〔〕{return姓名:+_name+,年齡:+_Age;}}這樣就完成了一個完整的類的定義,需要注意的是類在定義的時候需要指定他的訪問權(quán)限,這個設(shè)定是通過類的修飾符來定義的。在C#中,可以有下面的一種或幾種的組合:new、public、protected、internal、private、abstract和sealed,同樣的修飾不能出現(xiàn)兩次以上〔包括兩次〕。7.2.4小結(jié)本節(jié)著重介紹了ASP.NET技術(shù)的相關(guān)根底知識,包括ASP.NET技術(shù)的調(diào)試平臺的安裝與配置、名字空間的含義和ASP.NET工程中包含的文件類型。最后,本節(jié)還簡要介紹了本章中用來進行ASP.NET開發(fā)的C#語言的相關(guān)根底知識,包括:C#程序的根本結(jié)構(gòu)和C#程序中的類。7.3ASP.NET網(wǎng)絡(luò)表單〔WebForm〕7.3.1網(wǎng)絡(luò)表單〔WebForm〕介紹1.什么是網(wǎng)絡(luò)表單〔WebForm〕?表單〔Form〕在ASP.NET中具有特殊的含義。和HTML的中的Form標記不同,在ASP.NET中WebForm那么代表了一個一個的Web頁面??偟目磥?,F(xiàn)orm就像是一個容納各種控件的容器,各種控件都必須直接或者間接的和它有依存關(guān)系。因此,有的開發(fā)者稱其為“Web頁面〞。WEB表單,實際上是一個“對象〞〔Object〕,具有的其特有的屬性和方法。MS.NET架構(gòu)里面一個比較重要的概念就是“對象〞:所有的控件都是對象,甚至數(shù)據(jù)類型都成了對象;每種數(shù)據(jù)類型都有自己特有的屬性和方法。WEBFORM文件的后綴名是ASPX。當(dāng)瀏覽器第一次請求一個ASPX文件時,WEBFORM頁面將被CLR〔commonlanguageruntime〕編譯器編譯。此后,當(dāng)再有用戶訪問此頁面的時候,由于ASPX頁面已經(jīng)被編譯過,所以,CLR會直接執(zhí)行編譯過的代碼。這和ASP的情況完全不同。ASP只支持VBScript和JavaScript這樣的解釋性的腳本語言。所以ASP頁面是解釋執(zhí)行的。當(dāng)用戶發(fā)出請求后,無論是第一次,還是第一千次,ASP的頁面都將被動態(tài)解釋執(zhí)行。而ASP.NET支持可編譯的語言,包括VB.NET、C#、Jscript.NET等。所以,ASP.NET是一次編譯屢次執(zhí)行。為了簡化程序員的工作,ASPX頁面不需要手工編譯,而是在頁面被調(diào)用的時候,由CLR自行決定是否編譯。一般來說,下面兩種情況下,ASPX會被重新編譯:1〕ASPX頁面第一次被瀏覽器請求;2〕ASPX被改寫由于ASPX頁面的編譯特性,使ASPX頁面的訪問速度要比PHP和ASP頁面的訪問速度提高很多。2.一個簡單的WebForm在ASP.NET中,ASPX文件是最常用的一種文件,微軟公司建議將所有相關(guān)的文件,哪怕是純HTML文件都以ASPX文件的形式來保存,這樣能夠提高訪問的速度。下面就是用前面學(xué)習(xí)的知識來創(chuàng)立第一個WebForm。首先在VS.NET中創(chuàng)立新一個VisualC#工程,如圖4所示,在模板窗口中選擇ASP.NETWeb應(yīng)用程序,然后在下面的“位置〞欄中填入ASP.NET應(yīng)用在效勞器上的位置,填寫的格式是使用URL的方式,或者使用程序的默認值。點擊確定按鈕,完成應(yīng)用的創(chuàng)立工作。圖4VS.NETIDE新建工程窗口接下來翻開解決方案管理器,創(chuàng)立eg1.aspx文件,雙擊該文件,在主工作區(qū)就會顯示該頁的布局和代碼,通過點擊主工作區(qū)下放的HTML按鈕,就能夠看到eg1.aspx的代碼,把下面的代碼拷貝到eg1.aspx文件中,然后從瀏覽器訪問這個文件:例1:<!--源文件:eg1.aspx--><formaction="eg1.aspx"method="post"><h3>姓名:<inputid="name"type=text>性別:<selectid="sex"size=1><option>男</option><option>女</option><option>保密</option></select><inputtype=submitvalue="查詢"></form>然后就可以在瀏覽器中觀察eg1.aspx了,如圖5所示,地址的格式如下:://yourhost/yourapp/eg1.aspx圖5例1的執(zhí)行結(jié)果其中yourhost是當(dāng)前應(yīng)用所在的效勞器名,yourapp是文件所在應(yīng)用的名稱。由于我們沒有對表單提交做任何響應(yīng),所以,當(dāng)按下“查詢〞按鈕后,頁面的內(nèi)容沒有什么改變。3.ASP.NET中Web頁的處理過程這一節(jié)我們將深入到內(nèi)部,看看頁面是怎樣被處理的。和所有的效勞器端進程一樣,當(dāng)ASPX頁面被客戶端請求時,頁面的效勞器端代碼被執(zhí)行,執(zhí)行結(jié)果被送回到瀏覽器端。這一點和ASP并沒有太大的不同。但是,的架構(gòu)為我們做了許多別的事情。比方,它會自動處理瀏覽器的表單提交,把各個表單域的輸入值變成對象的屬性,使得我們可以像訪問對象屬性那樣來訪問客戶的輸入。它還把客戶的點擊映射到不同的效勞器端事件。了解WEB頁面的處理過程很重要。這樣你可以仔細地優(yōu)化你的代碼,提高代碼的效率。每一次頁面被請求,或者頁面事件被提交到效勞器,運行環(huán)境將執(zhí)行必要的代碼,重建整個頁面,把結(jié)果頁面送到瀏覽器,然后拋棄頁面的變量、控件的狀態(tài)和屬性等等頁面信息。當(dāng)下一次頁面被處理時,運行環(huán)境是不知道它的上一次執(zhí)行情況的。在這個意義上,ASPX頁面是沒有狀態(tài)的。這也是協(xié)議的特點〔為了加速頁面的訪問,在頁面里面可以使用緩存機制,也就是保存頁面的執(zhí)行結(jié)果,下一次頁面被請求時,直接送回上一次的執(zhí)行結(jié)果?!?。在ASP中,當(dāng)頁面被提交到效勞器端時,只有那些用戶輸入的值被傳遞到效勞器。其他的比方組件的屬性、變量的值,是不會傳遞的。所以效勞器無法了解組件的進一步的信息。在中,頁面對象的屬性、頁面控件的屬性被稱為“viewstate〞〔頁面狀態(tài)〕。頁面狀態(tài)在中被受到特別照顧。在實現(xiàn)上,通過把頁面的狀態(tài)封裝到一個隱藏的輸入域,從而可以在不同的頁面之間實現(xiàn)傳遞頁面的狀態(tài)。在頁面處理的內(nèi)部過程是按照如圖6所示的順序進行的:圖6頁面處理的內(nèi)部過程的順序首先,頁面的狀態(tài)被恢復(fù),然后觸發(fā)Page_Load事件。在這個過程中,你可以讀取或者重置頁面的屬性和控件的屬性,根據(jù)IsPostBack屬性判定頁面是否為第一次被請求,執(zhí)行數(shù)據(jù)綁定,或者進行數(shù)據(jù)庫連接等操作。第二個階段是事件處理,也就是處理訪問者在本頁訪問時所激發(fā)的各種事件。用戶可以處理特定的事件,也可以在表單需要校驗的情況下,根據(jù)IsValid屬性判定頁面的輸入是否有效。第三個階段Page_unLoad是在訪問者離開本頁的時候開始的,在這個階段通常進行一些清理工作,比方關(guān)閉翻開的文件和數(shù)據(jù)庫鏈路,或者釋放對象等。上面我們分析了頁面處理最重要的幾個階段。但是實際上,頁面的處理過程遠比上面的復(fù)雜,因為在實際應(yīng)用中,頁面上的每一個控件都需要進行適當(dāng)?shù)某跏蓟?.3.2什么是事件?在中,事件是一個非常重要的概念。所謂事件就是指一個應(yīng)用程序上的任何組成元素的狀態(tài)因為外部或者內(nèi)部的原因造成的狀態(tài)的一次改變,開發(fā)者能夠?qū)⒁欢ǖ姆椒ê褪录B接起來,一旦事件發(fā)生,程序就會執(zhí)行相應(yīng)的方法,作為對事件的響應(yīng)來處理控件的變化。在ASP.NET中,事件就是頁面上的控件因為訪問者或者自身的原因,其狀態(tài)發(fā)生改變的情況。ASP.NET提供了非常便利的機制幫助開發(fā)者完成對事件的處理。下面的例子將說明事件在WebForm中的應(yīng)用。1.事件的處理在一個WebForm中,可以包含一個或者多個Web元素或者控件,每一個Web元素或者控件都有假設(shè)干可以進行處理的消息。在下面的例如中,頁面包含三個Web控件,一個Label控件,兩個Button控件,用戶可以點擊兩個Button中的任意一個,點擊的事件將被程序處理,在Label控件上顯示相應(yīng)的信息。例如是由兩個文件組成,其中“eg2.aspx〞文件是ASP.NET的頁面文件,“eg2.aspx.cs〞文件是處理eg2.aspx頁面的相應(yīng)事件的代碼文件。例2:<!--源文件:eg2.aspx--><!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.0Transitional//EN"><HTML><HEAD><title>WebForm1</title><metaname="GENERATOR"Content="MicrosoftVisualStudio.NET7.1"><metaname="CODE_LANGUAGE"Content="C#"><metaname="vs_defaultClientScript"content="JavaScript"><metaname="vs_targetSchema"content="://schemas.microsoft/intellisense/ie5"></HEAD><bodyMS_POSITIONING="GridLayout"bgColor="#00ccff"><formid="Form1"method="post"runat="server"><FONTface="宋體"><asp:Labelid="Label1"style="Z-INDEX:101;LEFT:16px;POSITION:absolute;TOP:16px"runat="server"Width="226px"Height="42px"BackColor="Silver"BorderColor="Black"BorderStyle="Double"BorderWidth="1px"ForeColor="Red"><divalign="center">請點擊按鈕</div></asp:Label><asp:Buttonid="Button1"style="Z-INDEX:102;LEFT:264px;POSITION:absolute;TOP:24px"runat="server"Width="88px"Height="32px"Text="按鈕一"></asp:Button><asp:Buttonid="Button2"style="Z-INDEX:103;LEFT:368px;POSITION:absolute;TOP:24px"runat="server"Width="88px"Height="32px"Text="按鈕二"></asp:Button></FONT></form></body></HTML>可以看到在eg2.aspx中,添加了三個Web控件,分別是asp:Label:Label1、asp:Button:Button1和asp:Button:Button2。在eg2.aspx的第一行代碼中,PageLanguage一項設(shè)定了本頁的效勞器端代碼使用的是C#,Codebehind中設(shè)定了本頁的效勞器端代碼保存在中。頁面初始顯示如圖7所示:圖7eg2.aspx初始顯示/*源文件:eg2.aspx.cs*/usingSystem;usingSystem.Collections;usingSystemponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Web;I;namespaceCStest{{privatevoidButton1_Click〔objectsender,System.EventArgse〕{按鈕一被點擊了</div>";}privatevoidButton2_Click〔objectsender,System.EventArgse〕{}}}名字空間下的Page類。然后在WebForm1添加了兩個消息處理函數(shù)非別為Button1_Click和Button2_Click,這兩個函數(shù)分別響應(yīng)“按鈕一〞和“按鈕二〞的點擊事件。在這兩個函數(shù)體中,首先改變了Label1控件的ForeColor屬性,也就是改變Label1控件的前景色,這樣顯示出來的字體就會改變成新設(shè)定的顏色,然后改變Label1控件中顯示的文字,來區(qū)分兩個按鈕的點擊事件。點擊“按鈕一〞和“按鈕二〞后頁面情況如圖8和圖9所示:圖8點擊“按鈕一〞后的頁面顯示圖9點擊“按鈕二〞后的頁面顯示7.3.3WebForm中的控件1.什么是控件?在前面的例子里,在一個WebForm中添加了按鈕控件和Label控件,并且給控件添加事件處理函數(shù)來處理訪問者對控件的操作,那么控件的具體定義是什么呢?在ASP.NET中,一切都是對象,控件也是WebFrom中能夠容納的對象的一種,也就是說控件是具有可重用性、具有一定的外觀、具有一定的屬性和方法,能夠完成一定的功能,并且能夠被用戶在WebForm中引用的對象或者組件,大多數(shù)控件還可以響應(yīng)事件。在eg1.aspx簡短的代碼中,就是用到五個控件,它們分別是asp:textbox、asp:dropdownlist、asp:label、Button和Form控件,如圖10所示:圖10Eg1.aspx中使用的控件從eg1.aspx的代碼中可以看到,一個WebForm最主要的組成局部就是控件,微軟公司為了方便開發(fā)者使用,將控件分為三類,每一類控件都有其自身的特點。2.控件的分類在ASP.NET中的控件主要分為三類:效勞器端控件〔ServerControl〕、HTML控件〔HTMLControl〕和用戶自定義控件〔UserControl〕。效勞器端控件〔ServerControl〕就是指在效勞端存在和運行的控件。效勞器端控件也有自己的外觀,在客戶端瀏覽器中,ServerControl的外觀由HTML代碼來表現(xiàn)。ServerControl會在初始化時,根據(jù)客戶的瀏覽器版本,自動生成適合瀏覽器的HTML代碼。以前做網(wǎng)頁或者做ASP程序時候,必須考慮到瀏覽器的不同版本對HTML的支持有所不同,比方Netscape和IE對DHTML的支持就有所不同。當(dāng)時,解決瀏覽器版本兼容問題的最有效方法,就是在不同版本的瀏覽器中作測試?,F(xiàn)在,由于ServerControl自動適應(yīng)不同的瀏覽器版本,也就是自動兼容不同版本的瀏覽器,程序員的工作量減輕了許多。常用的效勞器端控件主要有如下幾種:文本輸入控件〔ASP:textbox〕、按鈕控件〔ASP:Button〕、復(fù)選控件〔ASP:CheckBox〕、單項選擇控件〔ASP:RadioButton〕、驗證控件、選擇控件和列表控件等。HTML控件比較常見,也就是通常用來制作網(wǎng)頁的HTML語言中的TAG,但是和以往的HTML不同的是,HTML控件在效勞器端是可見的,也就是可以通過效勞器端運行的程序來改變HTML控件的屬性或者處理HTML控件的事件。ASP.NET中提供了增加內(nèi)嵌效勞器控件的功能,使開發(fā)者能夠?qū)掖蔚妮p松增加你所定義的各種控件。事實上,對于表單等各種控件,可以不用更改或者稍微更改一下就可以屢次使用的。在通常情況下,把一個用作效勞器控件的web表單統(tǒng)稱為用戶控件,用一個.ascx為后綴的文件保存起來,這樣的保存使得它不被當(dāng)作一個web表單來運行,當(dāng)開發(fā)者在一個.aspx文件中使用它時,使用Register方法來進行調(diào)用。假設(shè)有一個文件名為saidy.ascx的文件,那么用下面的語句來調(diào)用它:<%@RegisterTagPrefix="Acme"TagName="Message"Src="saidy.ascx"%>上面的TagPrefix標記為用戶控件確定一個唯一的名字空間,TagName為用戶控件確定一個唯一的名稱,也可以用其它的名字代替“Message〞,Src為確定所包含的文件名稱和路徑。在WebFrom中就可以用下面的語句來調(diào)用這個自定義控件了:<Acme:Messagerunat="server"/>接下來將通過幾個例如來分別說明這三類控件的使用方法。3.效勞器端控件〔ServerControl〕的使用在下面的例子eg4.aspx里,將通過一個電子郵件和密碼的頁面的構(gòu)建給讀者介紹效勞器端文本輸入控件和驗證控件的使用。文本輸入控件目的是讓用戶輸入文本,文本模式是一個單行的輸入框,但是用戶可以根據(jù)自己的需要把它改成密碼輸入模式或者多行輸入模式。在下面的例子中用單行文本輸入模式和密碼模式來說明。在ASP.NET中,輸入一個文本,可用下面的語句來表示:<!--輸入郵件地址--><asp:TextBoxid=emailwidth=200pxmaxlength=60runat=server/>第一句為注釋,第二句就是文本輸入控件的引用,開發(fā)者可以設(shè)定輸入框的寬度和文本的長度,runat=server為表示運行于效勞器端。下面來看看輸入控件的校驗,在這里使用校驗控件來完成。使用校驗控件,一個簡單的語句就可以實現(xiàn)在普通的html頁面上的復(fù)雜的JavaScript、VBScript或者其他代碼的驗證。首先用戶必須輸入郵件地址:<!--驗證郵件的有效性!->不能為空--><asp:RequiredFieldValidatorid="emailReqVal"ControlToValidate="email"ErrorMessage="Email."Display="Dynamic"Font-Name="Verdana"Font-Size="12"runat=server>*</asp:RequiredFieldValidator>ControlToValidate="email"屬性為針對TextBoxid=email的文本框,Display屬性我們定義為“Dynamic〞,即為當(dāng)鼠標光標所在位置發(fā)生變化時屬性根據(jù)條件變化。如果輸入為空,那么打印出“*〞字符出來。在通常情況下,郵件地址總會包含一些特定的字符,在驗證的時候,就可以要求用戶輸入的內(nèi)容中包含我們規(guī)定的字符。<!--驗證郵件的有效性!->必須包含有效字符--><asp:RegularExpressionValidatorid="emailRegexVal"ControlToValidate="email"Display="Static"ValidationExpression="^[\w-]+@[\w-]+\.〔com|net|org|edu|mil〕$"Font-Name="Arial"Font-Size="11"runat=server>不是有效郵件地址</asp:RegularExpressionValidator>ControlToValidate="email"語句的作用和扇面介紹的一樣,ValidationExpression="^[\w-]+@[\w-]+\.〔com|net|org|edu|mil〕$"表示在輸入的郵件地址里要包含的內(nèi)容,如果沒有包含這些內(nèi)容,那么打印出“不是有效郵件地址“這個提示。對密碼的校驗也是同樣的道理,二者主要的差異是,對于密碼通常要求要確認輸入一次,校驗兩次輸入的密碼是否相同。用下面的代碼來完成校驗:<!--輸入確認密碼->兩個密碼是否相等--><asp:CompareValidatorid="CompareValidator1"ControlToValidate="passwd2"ControlToCompare="passwd"Display="Static"Font-Name="Arial"Font-Size="11"runat=server>密碼不相等</asp:CompareValidator>ControlToValidate="passwd2"ControlToCompare="passwd"此語句即為兩個密碼之間的比較,如果不相等那么打印出“密碼不相等“的提示。下面是例三完整的源代碼:例三:<!--源文件eg3.aspx--><html><body><br><br><br><divalign="center"><h3><fontface="Verdana">電子郵件和密碼驗證頁</font></h3></div><divalign="center"><formmethod="post"runat="server"ID="Form1"><hrwidth="600"size="1"noshade><br><br><!--標題--><asp:ValidationSummaryID="valSum"runat="server"HeaderText="按照下面的要求填寫:"DisplayMode="SingleParagraph"Font-Name="verdana"Font-Size="12"/><p/><tableborder="0"width="600"><tr><tdalign="right"><fontface="Arial"size="2">電子郵件:</font></td><td><!--輸入郵件地址--><asp:TextBoxid="email"width="200px"maxlength="60"runat="server"/></td><td><!--驗證郵件的有效性!->不能為空--><asp:RequiredFieldValidatorid="emailReqVal"ControlToValidate="email"ErrorMessage="Email."Display="Dynamic"Font-Name="Verdana"Font-Size="12"runat="server">*</asp:RequiredFieldValidator><!--驗證郵件的有效性!->必須包含有效字符--><asp:RegularExpressionValidatorid="emailRegexVal"ControlToValidate="email"Display="Static"ValidationExpression="^[\w-]+@[\w-]+\.〔com|net|org|edu|mil〕$"Font-Name="Arial"Font-Size="11"runat="server">不是有效郵件地址</asp:RegularExpressionValidator></td></tr><tr><tdalign="right"><fontface="Arial"size="2">密碼:</font></td><td><!--輸入密碼--><asp:TextBoxid="passwd"TextMode="Password"maxlength="20"runat="server"/></td><td><!--輸入密碼->密碼不能為空--><asp:RequiredFieldValidatorid="passwdReqVal"ControlToValidate="passwd"ErrorMessage="Password."Display="Dynamic"Font-Name="Verdana"Font-Size="12"runat="server">*</asp:RequiredFieldValidator><!--輸入密碼->包含其中有效字符--><asp:RegularExpressionValidatorid="passwdRegexBal"ControlToValidate="passwd"ValidationExpression=".*[!@#$%^&*+;:].*"Display="Static"Font-Name="Arial"Font-Size="11"Width="100%"runat="server">密碼必須包含〔!@#$%^&*+;:〕</asp:RegularExpressionValidator></td></tr><tr><tdalign="right"><fontface="Arial"size="2">再次輸入密碼:</font></td><td><!--輸入確認密碼->--><asp:TextBoxid="passwd2"TextMode="Password"maxlength="20"runat="server"/></td><td><!--輸入確認密碼->不能為空--><asp:RequiredFieldValidatorid="passwd2ReqVal"ControlToValidate="passwd2"ErrorMessage="Re-enterPassword."Display="Dynamic"Font-Name="Verdana"Font-Size="12"runat="server">*</asp:RequiredFieldValidator><!--輸入確認密碼->兩個密碼是否相等--><asp:CompareValidatorid="CompareValidator1"ControlToValidate="passwd2"ControlToCompare="passwd"Display="Static"Font-Name="Arial"Font-Size="11"runat="server">密碼不相等</asp:CompareValidator></td></tr></table><p/><inputrunat="server"type="submit"value="提交"ID="Submit1"NAME="Submit1"><p/><hrwidth="600"size="1"noshade></form></div></body></html>eg3.aspx的執(zhí)行結(jié)果如圖11所示:圖11頁面eg3.aspx的執(zhí)行結(jié)果在eg3.aspx的文本輸入控件中進行輸入,如果輸入的內(nèi)容與所需要填寫的內(nèi)容不符,比方兩個密碼不同或者填寫了無效的電子郵件地址,那么將得到如圖12所示的結(jié)果。圖12頁面eg3.aspx中進行不正確輸入的結(jié)果在例三中,使用到了文本輸入控件和三種校驗控件,根本上所有效勞器端控件的使用都和上面用到的控件的使用方法相同,就是將控件放置在WebForm中適宜的位置上,然后給控件的屬性設(shè)置適當(dāng)?shù)闹?,來控制控件完成所需要的功能。接下來看一下HTML控件的使用。4.HTML控件的使用HTML控件的使用和效勞器端控件的使用非常類似,但是其功能相對效勞器端控件來說較弱,在應(yīng)用中通常是通過事件響應(yīng)函數(shù)對HTML控件的狀態(tài)變化進行處理。例四〔eg4.aspx〕就是典型的HTML控件的使用,其中引用的HTML控件為HTMLTextArea控件。和HTML中的一樣,在ASP.NET中的TextArea也是一個多行輸入框。TextArea的寬度由它的Cols屬性決定,長度由Rows屬性決定。TextArea控件的定義如下:<textareaid="TextArea1"cols=40rows=4runat=server/>例4:首先是eg4.aspx文件的源代碼:<!--源文件eg4.aspx--><HTML><HEAD><title>eg4</title></HEAD><bodybgcolor="#ccccff"><h3><fontface="Verdana">HTML控件:HtmlTextArea的使用</font></h3><formrunat="server"ID="Form1"><fontface="Verdana"size="-1">請任意填寫:<br><textareaid="TextArea1"cols="40"rows="4"runat="server"></textarea><inputtype="submit"value="Submit"runat="server"ID="Submit1"><p/><spanid="Span1"runat="server"/></font></form></body></HTML>usingSystem;usingSystem.Collections;usingSystemponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Web;namespaceCStest{{privatevoidSubmit1_ServerClick〔objectsender,System.EventArgse〕{}}}在Submit1按鈕的消息響應(yīng)程序中,程序取到了TextArea控件中用戶填寫的文字,然后將這些文字賦值給Span1控件的InnerHtml屬性,Span1控件就會將InnerHtml屬性中的值顯示在頁面上。在上面的例子中,HTML控件看起來和HTML語言是一樣的,但是html語言書寫和以效勞器端控件的實現(xiàn)在思維方式上已經(jīng)有了很大的不同。對于html語言而言,只是一種標識;而對效勞器端html控件而言,卻已演變成為一段程序,一個對象。兩者的區(qū)別不僅僅是一個寫在HTML文件中、一個寫在ASP.NET文件中。HTML文件依賴于客戶端對標識的解釋執(zhí)行,HTML控件卻可以被編譯執(zhí)行,兩者在效率上的差異不言而喻。為了提高開發(fā)者所開發(fā)的程序的重用性,ASP.NET還提供了用戶定義控件。接下來就看一看用戶定義控件的使用。5.用戶自定義控件的使用例5:<!--源代碼eg5.ascx--><divalign=center>用戶控件例如<br><ahref="eg1.aspx">例如一</a><br><ahref="eg2.aspx">例如二</a><br><ahref="eg3.aspx">例如三</a><br><ahref="eg4.aspx">例如四</a><br><ahref="eg5.aspx">例如五</a></div>控件外觀如圖13所示:圖13用戶自定義控件eg5.ascx的外觀<%@RegisterTagPrefix="eg5"TagName="linkto"Src="eg5.ascx"%>注冊完之后,就可以使用下面的代碼在頁面中進行對用戶自定義控件的引用:<eg5:linktorunat="server"/>eg5.aspx文件的完整源代碼如下:<!--源文件eg5.aspx--><%@RegisterTagPrefix="eg5"TagName="linkto"Src="eg5.ascx"%><!--注冊小頁面控件--><HTML><body><BR><BR><BR><divalign="center">用戶自定義控件調(diào)用結(jié)果<BR><BR><eg5:linktorunat="server"ID="link1"/></div><BR><BR></b

溫馨提示

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

評論

0/150

提交評論