網(wǎng)站開(kāi)發(fā)設(shè)計(jì)常見(jiàn)問(wèn)題匯總_第1頁(yè)
網(wǎng)站開(kāi)發(fā)設(shè)計(jì)常見(jiàn)問(wèn)題匯總_第2頁(yè)
網(wǎng)站開(kāi)發(fā)設(shè)計(jì)常見(jiàn)問(wèn)題匯總_第3頁(yè)
網(wǎng)站開(kāi)發(fā)設(shè)計(jì)常見(jiàn)問(wèn)題匯總_第4頁(yè)
網(wǎng)站開(kāi)發(fā)設(shè)計(jì)常見(jiàn)問(wèn)題匯總_第5頁(yè)
已閱讀5頁(yè),還剩19頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、常見(jiàn)問(wèn)題匯總?cè)绻恍⌒碾p擊了網(wǎng)頁(yè),則VS2005會(huì)打開(kāi)網(wǎng)頁(yè)后臺(tái)處理程序錄入界面(見(jiàn)圖2-18)。其文件名和網(wǎng)頁(yè)文件名相同,但擴(kuò)展名為“.cs”的文件。圖2-18 網(wǎng)頁(yè)配套程序錄入界面遇到這種情況時(shí),不要慌亂,也不要?jiǎng)h除程序網(wǎng)頁(yè)的任何內(nèi)容,更不能單擊撤銷按鈕,程序錄入界面中的語(yǔ)句是與網(wǎng)頁(yè)配套的處理程序,其中很多是自動(dòng)生成的。隨意修改、刪除或撤銷,都會(huì)導(dǎo)致網(wǎng)頁(yè)無(wú)法運(yùn)行的嚴(yán)重后果。要回到網(wǎng)頁(yè)的設(shè)計(jì)界面,只需單擊VS2005上部的網(wǎng)頁(yè)標(biāo)簽“注冊(cè)頁(yè).aspx”即可。為了引起重視,可以做一次實(shí)驗(yàn):雙擊網(wǎng)頁(yè),即會(huì)打開(kāi)配套程序錄入頁(yè)“注冊(cè)頁(yè).aspx.cs”,然后右擊頁(yè)標(biāo)簽,選擇“關(guān)閉”或點(diǎn)擊 “注冊(cè)頁(yè).as

2、px” 標(biāo)簽,均能回到設(shè)計(jì)狀態(tài)。由此,我們也可以了解到,和一個(gè)網(wǎng)頁(yè)相關(guān)的界面有三個(gè):一是網(wǎng)頁(yè)外觀設(shè)計(jì)界面,二是網(wǎng)頁(yè)代碼界面,即“源”界面,三是網(wǎng)頁(yè)后臺(tái)處理程序的錄入界面。比如一個(gè)按鈕,在設(shè)計(jì)界面上我們可以直觀的看到或設(shè)置按鈕的樣式,在“源”界面中會(huì)有此按鈕的位置/大小/顏色等描述代碼,在程序界面中可能會(huì)有單擊按鈕時(shí)要實(shí)現(xiàn)的功能語(yǔ)句。2.1 運(yùn)行注冊(cè)頁(yè)單擊 “注冊(cè)頁(yè).aspx” 標(biāo)簽à單擊VS2005工具欄中的啟動(dòng)調(diào)試(即試運(yùn)行網(wǎng)頁(yè))按鈕,屏幕會(huì)彈出圖2-19所示的調(diào)試對(duì)話框。圖2-19 啟動(dòng)調(diào)試對(duì)話框這時(shí)應(yīng)選擇第一項(xiàng),啟動(dòng)調(diào)試。這項(xiàng)功能的作用是:一個(gè)程序設(shè)計(jì)完成后運(yùn)行時(shí),如果出錯(cuò)了,

3、則可以通過(guò)單步運(yùn)行,或中途暫停等手段,找出錯(cuò)誤,迅速排除。它是一個(gè)復(fù)雜網(wǎng)站設(shè)計(jì)過(guò)程中肯定會(huì)用到的一個(gè)功能。但就如同圖中的警告一樣,將來(lái)網(wǎng)頁(yè)真正要傳到網(wǎng)上時(shí),一定不要忘記禁止此項(xiàng)功能,否則這項(xiàng)功能會(huì)大大加重服務(wù)器負(fù)擔(dān),網(wǎng)頁(yè)訪問(wèn)也會(huì)變得很慢。此項(xiàng)設(shè)置將在最后一章介紹。重要提示:?jiǎn)螕舸_定后,如果本機(jī)安裝了網(wǎng)絡(luò)防火墻,網(wǎng)絡(luò)防火墻會(huì)在屏幕右下角彈出類似圖2-20所示的詢問(wèn)提示。圖2-20 詢問(wèn)是否允許VS2005模仿網(wǎng)絡(luò)服務(wù)器的提示這時(shí),千萬(wàn)不要簡(jiǎn)單的單擊確定按鈕,這樣就選擇了默認(rèn)的“禁止”,即不允許VS2005運(yùn)行網(wǎng)站,這將導(dǎo)致無(wú)法看到網(wǎng)頁(yè)在互聯(lián)網(wǎng)上被訪問(wèn)時(shí)的結(jié)果。如果不小心選錯(cuò)了,則需要找到防火墻的

4、設(shè)置選項(xiàng),重新將此項(xiàng)功能設(shè)為“允許”。接下來(lái)還會(huì)有一個(gè)看似同樣的提示(見(jiàn)圖2-21),我們同樣需要選擇“總是允許”。圖2-21 詢問(wèn)是否允許VS2005訪問(wèn)互聯(lián)網(wǎng)的提示之后,需要等待較長(zhǎng)時(shí)間,VS2005才會(huì)將一個(gè)圖2-22所示的空白網(wǎng)頁(yè)“產(chǎn)生”出來(lái),顯現(xiàn)在屏幕上。這并不是因?yàn)閂S2005慢或主機(jī)性能低,而是因?yàn)閂S2005要在本機(jī)上模擬一臺(tái)網(wǎng)絡(luò)服務(wù)器。重要提示:最好不要在網(wǎng)頁(yè)運(yùn)行時(shí)在VS2005中做任何修改,VS2005在運(yùn)行網(wǎng)頁(yè)時(shí)會(huì)禁止修改設(shè)計(jì)界面,這時(shí)不要以為VS2005突然死機(jī),而是正處于運(yùn)行狀態(tài),還沒(méi)有回到設(shè)計(jì)狀態(tài)。在網(wǎng)頁(yè)運(yùn)行時(shí),“源”界面和程序界面中的內(nèi)容雖然可以修改,但也無(wú)法立即

5、在正在運(yùn)行的網(wǎng)頁(yè)中反映出修改結(jié)果,因此,在運(yùn)行時(shí)如果發(fā)現(xiàn)了問(wèn)題,一般應(yīng)關(guān)閉正在運(yùn)行的網(wǎng)頁(yè),或單擊VS2005屏幕左上角工具欄內(nèi)的停止按鈕,重新回到設(shè)計(jì)狀態(tài)。工具箱中的各種控件是經(jīng)過(guò)分組的。單擊加粗的每組組名前的折疊按鈕“”,本組即會(huì)折疊起來(lái),之后按鈕變成了“”樣式,單擊此按鈕,本組即會(huì)展開(kāi)。所有組折疊后的結(jié)果如圖2-31所示。圖2-31 工具箱中的所有組別問(wèn)題解釋:1. 為什么屬性窗口中的條目總在變化這是因?yàn)閷傩源翱谥辛谐龅氖沁x定目標(biāo)的屬性。比如光標(biāo)在網(wǎng)頁(yè)的空白處時(shí),屬性窗口中顯示的是有關(guān)網(wǎng)頁(yè)的設(shè)置選項(xiàng);光標(biāo)放在表格內(nèi)的空白處時(shí),屬性窗口中顯示的是此單元格的屬性選項(xiàng);光標(biāo)放在文本框上時(shí),屬性窗

6、口中顯示的是文本框的各種設(shè)置選項(xiàng)。因此,在調(diào)出屬性窗口前,一定要注意光標(biāo)在哪個(gè)目標(biāo)上。2. 為什么在屬性窗口中,找不到要設(shè)的項(xiàng)很多時(shí)候,打開(kāi)屬性窗口,卻找不到要設(shè)的項(xiàng)。原因很多,最常見(jiàn)的原因是我們的鼠標(biāo)沒(méi)有選定要設(shè)的目標(biāo)。比如要設(shè)置單選列表控件,但光標(biāo)卻在文本框上,這時(shí)就會(huì)找不到我們要設(shè)的項(xiàng),即使找到了,也是兩類控件共有的項(xiàng),這樣,即使能設(shè)置,也是設(shè)錯(cuò)了對(duì)象。因此,在調(diào)出屬性窗口前,一定要注意光標(biāo)在哪個(gè)目標(biāo)上。不過(guò),我們可以通過(guò)觀察屬性窗口上部的提示,很容易發(fā)現(xiàn)選錯(cuò)了目標(biāo)(見(jiàn)圖2-37)。在屬性窗口最上端,顯示著當(dāng)前正要設(shè)置的目標(biāo)的名字。 圖2-37 屬性設(shè)置窗口即使目標(biāo)沒(méi)有選錯(cuò),有時(shí)也會(huì)找不

7、到要設(shè)的項(xiàng),原因可能是電腦反應(yīng)比較遲鈍。這時(shí),可以通過(guò)單擊屬性窗口右上角的下拉按鈕“”,從中找到要設(shè)的目標(biāo)即可。這種方法也很常用。3. 如何快速找到要設(shè)的項(xiàng)屬性窗口中的條目默認(rèn)是按類別分組的,幾乎所有控件都有圖2-38所示的屬性組。每個(gè)組分類依據(jù)見(jiàn)表2-1。分類顯示對(duì)于不熟悉其中選項(xiàng)的人而言,找到要設(shè)的項(xiàng)很不容易,有時(shí)需要從頭到尾找?guī)妆椤D2-38 屬性分組表2-1 屬性組說(shuō)明組說(shuō)明布局本控件的位置、大小等可訪問(wèn)性本控件和操作有關(guān)的一些設(shè)置項(xiàng)。如快捷鍵數(shù)據(jù)本控件和數(shù)據(jù)庫(kù)連接有關(guān)屬性外觀本控件的字體、字號(hào)、顏色等行為在后幾章用到時(shí),自然會(huì)明白的雜項(xiàng)快速查找設(shè)置項(xiàng)的方法是單擊屬性窗口中的“”按鈕,

8、所有屬性即會(huì)按拼音順序從A到Z順序排列,這時(shí)再找條目時(shí),就快了許多(如果單擊“”按鈕,屬性會(huì)回到按組分類狀態(tài))。如果一個(gè)條目前面有個(gè)“”(見(jiàn)圖2-38),則表示本條目包含多條子項(xiàng)設(shè)置,單擊此按鈕,可顯示出各子項(xiàng)。當(dāng)我們?cè)O(shè)計(jì)水平到一定程度時(shí),有時(shí)就需要展開(kāi)各項(xiàng),從中查找可以設(shè)置的某個(gè)功能。網(wǎng)頁(yè),回到設(shè)計(jì)狀態(tài)。2.2 實(shí)現(xiàn)控件與數(shù)據(jù)庫(kù)的對(duì)接數(shù)據(jù)庫(kù)和網(wǎng)頁(yè)外觀都已經(jīng)設(shè)計(jì)完成,但兩者之間還沒(méi)有聯(lián)系,本節(jié)將實(shí)現(xiàn)注冊(cè)頁(yè)面和數(shù)據(jù)庫(kù)的對(duì)接,為網(wǎng)頁(yè)和數(shù)據(jù)庫(kù)搭起橋梁,只有這樣,用戶在注冊(cè)時(shí)填寫在網(wǎng)頁(yè)上的數(shù)據(jù)才能存入數(shù)據(jù)庫(kù)。VS2005提供了擔(dān)當(dāng)“橋梁”重任的控件,它在工具箱的數(shù)據(jù)組內(nèi),專業(yè)名稱為數(shù)據(jù)源控件。不同的數(shù)

9、據(jù)庫(kù)使用不同的數(shù)據(jù)源控件,本書所用的數(shù)據(jù)庫(kù)為Access,因此,需要使用的數(shù)據(jù)源控件為AccessDataSource(見(jiàn)圖2-41)。圖2-41 工具箱中的數(shù)據(jù)源通過(guò)將數(shù)據(jù)源控件添加到網(wǎng)頁(yè),并通過(guò)AccessDataSource進(jìn)行一些簡(jiǎn)單設(shè)置,就可以實(shí)現(xiàn)控件與數(shù)據(jù)庫(kù)的對(duì)接(見(jiàn)圖2-42),這樣,當(dāng)用戶單擊“提交”按鈕后,橋梁即會(huì)將用戶注冊(cè)信息從網(wǎng)頁(yè)內(nèi)收集起來(lái),并正確寫入數(shù)據(jù)庫(kù)中相應(yīng)的列內(nèi)。表內(nèi)控件“橋梁”數(shù)據(jù)庫(kù)程序的寫入指令圖2-42 數(shù)據(jù)對(duì)接示意圖以下將介紹對(duì)接的設(shè)置過(guò)程,其中:環(huán)節(jié):創(chuàng)建橋梁,見(jiàn)2.9.1小節(jié);環(huán)節(jié):連接數(shù)據(jù)表,見(jiàn).4小節(jié);環(huán)節(jié):連接網(wǎng)頁(yè)控件,實(shí)現(xiàn)對(duì)接。

10、見(jiàn)2.9.5小節(jié);環(huán)節(jié):編寫插入程序,用戶信息寫入數(shù)據(jù)庫(kù)。見(jiàn)2.10節(jié)。2.7.8添加比較控件注意:驗(yàn)證組內(nèi)的幾種控件的名稱很容易混淆,因此,添加時(shí)一定要小心。重要提示:在鍵入每個(gè)ValidationExpression屬性值時(shí),一定要注意使用英文標(biāo)點(diǎn)符號(hào),一定要區(qū)分大小寫(第二行的S為大寫),總之,輸入時(shí)一定要小心,否則會(huì)使用戶即使輸入正確,也會(huì)出現(xiàn)錯(cuò)誤提示,也無(wú)法提交。2.8.1 添加數(shù)據(jù)對(duì)接控件從工具箱的“數(shù)據(jù)”組中,拖出一個(gè)AccessDataSource控件到網(wǎng)頁(yè)的“新會(huì)員注冊(cè)”文字后面??丶先刖W(wǎng)頁(yè)后,網(wǎng)頁(yè)上會(huì)顯示其名字為AccessDataSource1(見(jiàn)圖2-43)。圖2-4

11、3 Access數(shù)據(jù)源控件外觀添加數(shù)據(jù)源控件后,會(huì)發(fā)現(xiàn)它占用一行位置,我們會(huì)感覺(jué)標(biāo)題格變寬了,實(shí)際上在運(yùn)行時(shí),這一控件是不占位置的,它是一個(gè)運(yùn)行時(shí)不可見(jiàn)控件,永遠(yuǎn)不可能出現(xiàn)在瀏覽者的網(wǎng)頁(yè)上。如果要專心設(shè)置頁(yè)面布局,則有這個(gè)控件還是感覺(jué)很不舒服,無(wú)法讓我們更專心于網(wǎng)頁(yè)排版。不過(guò)VS2005已經(jīng)為我們想到了這一點(diǎn)。單擊VS2005“視圖”菜單,單擊“非可視控件”菜單項(xiàng)(見(jiàn)圖2-44),即會(huì)去除此項(xiàng)的選定,并且會(huì)發(fā)現(xiàn)網(wǎng)頁(yè)上的數(shù)據(jù)源控件“消失”了,表格重新回到原來(lái)的狀態(tài)。再次單擊“非可視控件”菜單項(xiàng),即會(huì)重新顯示出數(shù)據(jù)源控件。一般情況下,除非專門調(diào)整網(wǎng)頁(yè)外觀,否則一般都會(huì)讓這些起關(guān)鍵作用的非可視控件顯

12、示在設(shè)計(jì)界面。圖2-44 非可視控件是否顯示選項(xiàng)菜單2.8.2 確認(rèn)數(shù)據(jù)庫(kù)存在在設(shè)置數(shù)據(jù)源連接數(shù)據(jù)表之前,必須先確定數(shù)據(jù)庫(kù)存在。調(diào)出解決方案管理器窗口(這個(gè)窗口一般位于屏幕右側(cè)),查看窗口內(nèi)有無(wú)已建好的數(shù)據(jù)庫(kù)名“zz數(shù)據(jù)庫(kù).mdb”。此文件存放在App_Data文件夾內(nèi)(見(jiàn)圖2-45)。這是一個(gè)受系統(tǒng)保護(hù)的文件夾,網(wǎng)絡(luò)服務(wù)器會(huì)禁止任何人打開(kāi)或下載這一文件夾中的任何文件。有人曾將網(wǎng)頁(yè)上的圖片放在了這一文件夾內(nèi),結(jié)果運(yùn)行網(wǎng)頁(yè)時(shí),總也無(wú)法顯示這些圖片,原因就在于他的圖片放錯(cuò)了文件夾。圖2-45 刷新網(wǎng)站重要提示:數(shù)據(jù)庫(kù)必須放在App_Data文件夾內(nèi),這是保證數(shù)據(jù)不被人非法竊取的最基本的前提。問(wèn)題解

13、答:管理器窗口內(nèi)數(shù)據(jù)庫(kù)文件不存在怎么辦?1. 如果文件夾內(nèi)確實(shí)沒(méi)有,可以單擊窗口上方的刷新按鈕。2. 如果還是沒(méi)有,則說(shuō)明數(shù)據(jù)庫(kù)設(shè)計(jì)時(shí),沒(méi)有保存在此文件夾內(nèi),這時(shí)就需要從“我的電腦”中,找到已設(shè)計(jì)好的數(shù)據(jù)庫(kù),復(fù)制到“E:蜘蛛網(wǎng)App_Data”文件夾內(nèi),或重新設(shè)計(jì)并保存到此文件夾內(nèi)。3. 如果有,但是數(shù)據(jù)庫(kù)文件不在App_Data文件夾內(nèi),而是和注冊(cè)頁(yè)同在一級(jí)上,這時(shí)可以用鼠標(biāo)將其拖入App_Data文件夾。總之,只有保證數(shù)據(jù)庫(kù)存在,才能繼續(xù)以下的設(shè)計(jì)。2.9.3程序說(shuō)明1. 關(guān)于顏色:語(yǔ)句輸入時(shí),其中的紅色字如果在紅色雙引號(hào)之內(nèi),并不表示程序有錯(cuò)誤,按照VS2005的約定,紅色為字符串、藍(lán)色

14、為VS2005專用詞,又叫關(guān)鍵字。青色是一種VS2005專用的一種稱為類的專用詞,讀者暫且無(wú)需明白什么是類。2. 本程序使用了一個(gè)組合語(yǔ)句try catch( ),翻譯成中文意思為:“要做一件事,做做試試;不行就找原因,聲明我做不了”。3. AccessDataSource1.Insert:執(zhí)行數(shù)據(jù)源1的插入功能;即讓數(shù)據(jù)源1插入一條記錄,將注冊(cè)信息寫入數(shù)據(jù)庫(kù)。4. 注意,AccessDataSource1的最后一個(gè)字符是數(shù)字1,不是英文字符L。5. 1和L、0和O混淆,true寫成ture是初學(xué)者特別容易出現(xiàn)的錯(cuò)誤。6. Response:中文翻譯為”回應(yīng)”,單擊后的回應(yīng)一般是一個(gè)對(duì)話框或一

15、個(gè)新網(wǎng)頁(yè)?!癛esponse.Write("<script>window.alert('重復(fù)注冊(cè)或網(wǎng)絡(luò)異常')</script>");”為一固定寫法,其功能是彈出一個(gè)對(duì)話框,框內(nèi)文字為“重復(fù)注冊(cè)或網(wǎng)絡(luò)異?!?。7. 說(shuō)明:以后要編寫彈出對(duì)話框語(yǔ)句時(shí),只需復(fù)制此語(yǔ)句,然后修改框內(nèi)文字即可。8. Exception:中文翻譯為”異?!?,即外部因素引起的程序無(wú)法執(zhí)行。程序異常不是程序錯(cuò)誤,程序錯(cuò)誤是程序編寫不正確。catch (Exception ee)即捕獲異常,不讓異常擴(kuò)散。如果程序沒(méi)有57行,當(dāng)執(zhí)行插入遇到異常時(shí),網(wǎng)頁(yè)就會(huì)出現(xiàn)一長(zhǎng)篇滿是

16、英文和代號(hào)的錯(cuò)誤頁(yè),而不是一個(gè)友好的異常提示對(duì)話框。9. 程序編寫完畢,VS2005會(huì)在屏幕底部錯(cuò)誤列表窗口中顯示如圖2-54所示內(nèi)容。圖2-54 錯(cuò)誤列表窗口本窗口中可列出的錯(cuò)誤有兩類,一類為警告“”,或者說(shuō)是編程建議,這類問(wèn)題不是錯(cuò)誤,而是說(shuō)程序可能不夠完善,但這類問(wèn)題不會(huì)影響程序運(yùn)行。另一類為程序編寫錯(cuò)誤“”,這類錯(cuò)誤一定要排除,否則網(wǎng)頁(yè)無(wú)法正常運(yùn)行。重要提示:1. 程序中的字母要區(qū)分大小寫,VS2005嚴(yán)格區(qū)分大小寫,A和a是完全不同的。一字之錯(cuò),即會(huì)導(dǎo)致程序無(wú)法運(yùn)行。2. 在運(yùn)行網(wǎng)頁(yè)之前,一定要查看“錯(cuò)誤列表”窗口中有無(wú)程序錯(cuò)誤提示,如果存在,一定要改正之后再運(yùn)行。程序書寫并檢查無(wú)誤

17、,單擊全部保存按鈕,再單擊運(yùn)行按鈕,試填寫一個(gè)注冊(cè)信息,并提交,看是否出現(xiàn)已保存提示。測(cè)試完畢,關(guān)閉網(wǎng)頁(yè),回到設(shè)計(jì)狀態(tài)。思考題:1. 如何啟動(dòng)VS2005,并建立一個(gè)注冊(cè)頁(yè)。2. 起始頁(yè)關(guān)閉后怎么打開(kāi),或文件關(guān)閉后怎樣打開(kāi)?3. 如何在網(wǎng)頁(yè)中插入表格?怎么調(diào)整表格的寬度大?。?. 如何對(duì)用戶名、姓名等選項(xiàng)進(jìn)行設(shè)置成必填項(xiàng);密碼和確認(rèn)密碼設(shè)置為不能為空并且使輸入的密碼為不可見(jiàn);同時(shí)如何驗(yàn)證密碼與確認(rèn)密碼輸入的是否一致?5. 如何設(shè)置擴(kuò)充地址選項(xiàng)的寬度?6. 如何設(shè)置性別選項(xiàng),使其成為二選一按鈕。7. 如何建立數(shù)據(jù)庫(kù)與網(wǎng)頁(yè)之間的鏈接?8. 如何使用Access2003建立數(shù)據(jù)庫(kù)和數(shù)據(jù)表?1.5.4

18、  代碼改變狀態(tài)的通知文檔窗口的另一個(gè)變化是包含一個(gè)新的代碼改變通知系統(tǒng)。在處理頁(yè)面上的代碼時(shí),注意現(xiàn)在默認(rèn)包含行號(hào)。單擊任意行號(hào),就會(huì)突出顯示該行代碼。行號(hào)旁邊的是一個(gè)顏色改變欄,如圖2-7所示。圖  2-7這個(gè)顏色欄通知用戶ASP.NET頁(yè)面中的代碼發(fā)生了變化。如果某一行代碼沒(méi)有顯示顏色欄,就表示還未對(duì)該行代碼進(jìn)行修改。在對(duì)某行代碼作了修改后,該行的前面就會(huì)顯示一個(gè)黃色欄。保存了文件后,這個(gè)顏色欄會(huì)變成綠色。黃色代碼行表示已進(jìn)行了修改,但未保存到文件中。在圖2-7的黑白屏幕圖中,看不出第 13、14和15行旁邊的黃色欄,但可以看出它們的陰影有區(qū)別。顏色的差異(與其余代碼

19、行的顏色欄相比)表示這些代碼不久前進(jìn)行了修改。1.5.5  錯(cuò)誤通知和輔助在Visual Studio的以前版本中,設(shè)計(jì)期間的錯(cuò)誤檢查是IDE的一個(gè)重要特性,在輸入代碼的過(guò)程中,Visual Studio會(huì)檢查代碼中是否有錯(cuò)誤。例如,如果輸入了If Then語(yǔ)句(使用Visual Basic),但沒(méi)有包含End If語(yǔ)句,IDE就會(huì)給If Then語(yǔ)句加上下劃線,提醒用戶語(yǔ)句塊不完整。在更正錯(cuò)誤后,下劃線就會(huì)消失。在Visual Studio 2005中,如果設(shè)計(jì)期間出錯(cuò),就會(huì)在下劃線的右邊出現(xiàn)一個(gè)小方框,如圖2-8所示。圖  2-8把光標(biāo)放在該方框上,就會(huì)顯示一個(gè)錯(cuò)誤符號(hào)

20、,單擊該錯(cuò)誤符號(hào),會(huì)打開(kāi)一個(gè)對(duì)話框,其中給出了更正錯(cuò)誤的選項(xiàng)。例如,如果在Visual Basic中使用了If Then語(yǔ)句,但沒(méi)有使用End If語(yǔ)句,單擊Error Notification按鈕就會(huì)在IDE中顯示一個(gè)更正對(duì)話框,如圖2-9所示。圖  2-9這個(gè)彈出的對(duì)話框首先陳述問(wèn)題。在這個(gè)例子中,它說(shuō)明任何打開(kāi)的If語(yǔ)句必須包含一個(gè)閉合的End If語(yǔ)句。在這個(gè)錯(cuò)誤通知的下面是一個(gè)鏈接,允許進(jìn)行更正。在鏈接的下面是一個(gè)代碼示例,說(shuō)明該更正會(huì)如何影響代碼。有時(shí),更正設(shè)計(jì)期間的錯(cuò)誤有多個(gè)選項(xiàng)。例如,在ASP.NET頁(yè)面中有如下代碼:Dim x As Integr其中,Integr拼

21、寫不正確;正確的拼寫是Integer。IDE通知用戶出了這個(gè)錯(cuò)誤,并打開(kāi)相關(guān)的錯(cuò)誤對(duì)話框。更正這個(gè)錯(cuò)誤有3個(gè)選項(xiàng),如圖2-10所示。要更正它,可以滾動(dòng)到合適的更正選項(xiàng)上,單擊該鏈接。圖  2-10重要提示:一定不要將非數(shù)據(jù)庫(kù)文件放入“解決方案資源管理器”App_Data文件夾內(nèi),否則在瀏覽網(wǎng)頁(yè)時(shí),會(huì)無(wú)法顯示。而且一般應(yīng)在“解決方案資源管理器”內(nèi)單獨(dú)創(chuàng)建一個(gè)名為pic或img等的文件夾,將圖片一類的文件保存在此類文件夾內(nèi)。1. 確定登錄控件處于選定狀態(tài)確定方法為查看登錄控件四周是否有三個(gè)小方框(見(jiàn)圖3-11)。這三個(gè)小方框的作用是調(diào)整控件大小,必須用鼠標(biāo)按住三者之一,才能用鼠標(biāo)縮放控件

22、的長(zhǎng)度或?qū)挾取S捎谶@兩個(gè)控件在運(yùn)行時(shí)不可見(jiàn),不會(huì)占用網(wǎng)頁(yè)空間,因此,它們?cè)诰W(wǎng)頁(yè)上的位置和順序均沒(méi)有必要考慮。程序中的兩個(gè)斜杠“/”為C#語(yǔ)言特有的標(biāo)志,它用以說(shuō)明本行其后的文字為注釋文字,在程序中添加注釋是優(yōu)秀程序員的習(xí)慣,它可以大大提高程序的可讀性,幫助自己和其它閱讀程序的人更快的掌握程序的功能。但作為練習(xí),這兩個(gè)“/”和其后文字可以不必輸入。3.3.1 事件與編程事件,是目前流行的所有語(yǔ)言中的一個(gè)十分重要的概念。1. 什么是事件事件(Event),就是在某個(gè)控件(包括網(wǎng)頁(yè)本身)上發(fā)生的事情。比如一想到按鈕,人們會(huì)自然會(huì)想到在按鈕身上會(huì)有“Click”(點(diǎn)擊)事件。2. 如何知道一個(gè)控件都有

23、哪些事件以登錄框?yàn)槔壕唧w操作步驟如下:(1) 單擊VS2005上部的“Default.aspx”頁(yè)標(biāo)簽,切換到“設(shè)計(jì)”界面(見(jiàn)圖3-17)。(2) 單擊選中登錄控件Login1。(3) 按F4鍵,調(diào)出屬性窗口。(4) 單擊屬性窗口上部的事件按鈕。操作結(jié)果如圖3-17右側(cè)所示。圖3-17 登錄控件的“屬性/事件”窗口說(shuō)明:要將屬性窗口設(shè)置回到顯示屬性方式,請(qǐng)單擊其左側(cè)的按鈕。從圖3-17所示的屬性窗口可以看出,窗口左側(cè)為事件列表,共有10種事件。其中第一個(gè)為Authenticate事件,它發(fā)生在“引發(fā)對(duì)用戶進(jìn)行身份驗(yàn)證”時(shí)刻,即單擊“登錄”按鈕時(shí)發(fā)生。在窗口的右側(cè),是事件對(duì)應(yīng)的程序,如果空白,

24、表示沒(méi)有對(duì)此事件編寫程序。圖中第一格顯示的是Login1_Authenticate,表示程序輸入窗口,即Default.aspx.cs中有一個(gè)名為L(zhǎng)ogin1_Authenticate的程序。由此可見(jiàn),屬性窗口即是屬性顯示與設(shè)置窗口,又是事件顯示與選擇窗口。3. 排除事件錯(cuò)誤如果要?jiǎng)h除程序錄入界面中的某個(gè)程序,則一定要在某個(gè)控件的屬性窗口中找到此名稱,并且刪除。否則程序會(huì)運(yùn)行出錯(cuò)。為此,我們可以做一個(gè)實(shí)驗(yàn):(1) 雙擊HiddenField1控件,程序窗口中會(huì)打開(kāi)并自動(dòng)生成一個(gè)名HiddenField1_ValueChanged的空程序(見(jiàn)圖3-18)。(2) 我們并沒(méi)有想針對(duì)HiddenFi

25、eld1編寫程序,因此,應(yīng)將圖中的22-25行刪除。(3) 單擊啟動(dòng)調(diào)試按鈕“”,運(yùn)行網(wǎng)頁(yè),會(huì)出現(xiàn)圖3-19所示的錯(cuò)誤頁(yè)面。圖3-18 自動(dòng)產(chǎn)生的事件對(duì)程序圖3-19 缺少事件對(duì)應(yīng)程序錯(cuò)誤錯(cuò)誤頁(yè)面顯示,ID為HiddenField1的控件缺少HiddenField1_ValueChanged對(duì)應(yīng)的程序。這是因?yàn)槲覀儎倓倢⑵鋭h除。要排除這一錯(cuò)誤,需要繼續(xù)如下操作。(1) 切換到Default.aspx設(shè)計(jì)界面(見(jiàn)圖3-20);(2) 單擊選中HiddenField1;(3) 按F4鍵調(diào)出屬性窗口;(4) 單擊事件按鈕找到ValueChanged事件。會(huì)發(fā)現(xiàn)屬性/事件窗口中也自動(dòng)添加了一個(gè)對(duì)應(yīng)程序

26、名“HiddenField1_ValueChanged”。(5) 逐字刪除此事件對(duì)應(yīng)的程序名“HiddenField1_ValueChanged”。圖3-20 屬性/事件窗口中自動(dòng)添加的對(duì)應(yīng)程序名4. 事件是由誰(shuí)規(guī)定的事件是由編寫控件的人規(guī)定的,VS2005中目前工具箱中的所有控件,都是微軟公司設(shè)計(jì)的,因此,每個(gè)控件的所有事件都是由微軟公司規(guī)定的。在使用控件事件時(shí),只有使用的權(quán)利,沒(méi)有規(guī)定一個(gè)控件是否具有哪種事件的權(quán)利。5. 事件對(duì)應(yīng)程序何時(shí)會(huì)得到執(zhí)行如果將程序?qū)懺谀撤N事件對(duì)應(yīng)的程序內(nèi),當(dāng)事件發(fā)生時(shí),就會(huì)執(zhí)行相應(yīng)的程序,如果事件總也不發(fā)生,則程序會(huì)總也得不到執(zhí)行。比如網(wǎng)頁(yè)訪問(wèn)者在打開(kāi)Defau

27、lt.aspx網(wǎng)頁(yè)后,總也不單擊登錄按鈕,就會(huì)總也不執(zhí)行Default.aspx.cs頁(yè)中的Login1_Authenticate程序。明白了什么是事件及事件發(fā)生的原因,就等于知道了編寫程序的時(shí)機(jī),將程序語(yǔ)句寫入合適的事件內(nèi),當(dāng)事件發(fā)生時(shí),就會(huì)執(zhí)行所寫程序,也就能夠得到程序員想要的結(jié)果。許多控件都有相同的事件。因此,學(xué)習(xí)時(shí)間長(zhǎng)了,自然會(huì)對(duì)控件的這些事件何時(shí)發(fā)生有更深的了解,現(xiàn)在不必急于將所有事件都明白的一清二楚。圖3-25 添加顯示明細(xì)控件通過(guò)觀察網(wǎng)頁(yè)運(yùn)行結(jié)果,讀者會(huì)發(fā)現(xiàn)如下問(wèn)題:?jiǎn)栴}1:為什么網(wǎng)頁(yè)運(yùn)行后,未登錄前,顯示詳情控件內(nèi)不顯示任何數(shù)據(jù),登錄后就會(huì)顯示數(shù)據(jù)。問(wèn)題解釋:顯示詳情控件的數(shù)據(jù)

28、源于數(shù)據(jù)源AccessDataSource1。數(shù)據(jù)源在取數(shù)據(jù)時(shí),有兩個(gè)限定條件(見(jiàn)圖3-24)一是用戶名=HiddenField1,二是密碼=HiddenField2,網(wǎng)頁(yè)剛剛運(yùn)行時(shí),這兩個(gè)隱藏輸入控件中的值全部為空,因此,數(shù)據(jù)源只能從數(shù)據(jù)庫(kù)中取得0個(gè)符合條件的數(shù)據(jù)。在登錄后,通過(guò)自編程序,為兩個(gè)隱藏輸入控件賦了值。數(shù)據(jù)源依據(jù)取數(shù)條件,從數(shù)據(jù)庫(kù)中取出了一條記錄,于是顯示詳情控件就將其顯示在了網(wǎng)頁(yè)上。問(wèn)題2:雖然網(wǎng)頁(yè)上在登錄成功之后能夠顯示出已登錄者的用戶名和密碼,但有登錄框內(nèi)卻提示“登錄失敗,請(qǐng)重試”(見(jiàn)圖3-26)。問(wèn)題解釋:按VS2005的要求,登錄框應(yīng)使用專用的數(shù)據(jù)庫(kù)存放用戶信息,而不是

29、我們的“zz數(shù)據(jù)庫(kù).mdb”。本書沒(méi)有按照VS2005的要求設(shè)計(jì)出這樣一個(gè)數(shù)據(jù)庫(kù),登錄框自然就無(wú)法找到登錄者信息,所以才會(huì)在登錄框內(nèi)顯示“登錄失敗,請(qǐng)重試”。但按本書的設(shè)計(jì),即便出現(xiàn)這樣的錯(cuò)誤提示,也并不表示程序有錯(cuò)。只要顯示明細(xì)內(nèi)能夠顯示出登錄者的用戶名和密碼,則表示設(shè)計(jì)正確。在完成本章設(shè)計(jì)后,讀者會(huì)發(fā)現(xiàn),網(wǎng)頁(yè)上將來(lái)不會(huì)在登錄成功會(huì)顯示這一錯(cuò)誤提示,僅僅會(huì)在用戶名或密碼輸入錯(cuò)誤后才顯示。問(wèn)題3:在顯示明細(xì)控件中,密碼以明文的方式顯示,如何才能實(shí)現(xiàn)以“*”顯示。問(wèn)題解釋:這只是暫時(shí)現(xiàn)象,下一節(jié)本書將會(huì)做一個(gè)小小的進(jìn)一步設(shè)計(jì),即會(huì)讓網(wǎng)頁(yè)訪問(wèn)者永遠(yuǎn)都不會(huì)看到登錄者的密碼。問(wèn)題4:數(shù)據(jù)表控件(Gri

30、dView)和顯示明細(xì)控件(DetailsView)兩者之間的區(qū)別有多大。問(wèn)題解釋:二者最主要的是顯示數(shù)據(jù)時(shí)的排列方式不同,GridView適合于類似于Excel格式的多條記錄同時(shí)橫向顯示與編輯,而DetailsView主要用于顯示和編輯單條記錄,記錄中的各列縱向顯示。兩種控件都可以很容易的添加“插入/修改/刪除”按鈕以及添加自動(dòng)分頁(yè)功能。3.4.1 判斷結(jié)構(gòu)第2428行為一個(gè)判斷結(jié)構(gòu)。1. 判斷結(jié)構(gòu)的寫法常見(jiàn)的判斷結(jié)構(gòu)有三種寫法(見(jiàn)圖3-31)。 (1) 典型的判斷結(jié)構(gòu)(2) 簡(jiǎn)單判斷結(jié)構(gòu)(3) 復(fù)雜判斷結(jié)構(gòu)圖3-31 復(fù)雜語(yǔ)句類型由圖3-31可以看出:(1) 判斷結(jié)構(gòu)以“if”開(kāi)始,“if

31、”是判斷結(jié)構(gòu)的關(guān)鍵詞,它的顏色為藍(lán)色,在默認(rèn)情況下,藍(lán)色為VS2005專用詞。由圖中可以看出,除了“if”外,在判斷結(jié)構(gòu)中,還可能用到的關(guān)鍵詞有“else”、“else if”。(2) 判斷條件一定要用小括號(hào)括起來(lái)。(3) 要執(zhí)行的語(yǔ)句如果是多條,則一定要用大括號(hào)括起來(lái)。要執(zhí)行的語(yǔ)句如果僅有一條,則大括號(hào)可以省略。(4) 對(duì)于大括號(hào)內(nèi)的語(yǔ)句,每句后面都要以分號(hào)結(jié)束。2. 判斷結(jié)構(gòu)的作用判斷結(jié)構(gòu)是程序中常用的一種語(yǔ)句結(jié)構(gòu)。它能根據(jù)程序運(yùn)行出現(xiàn)的不同情況,選擇執(zhí)行不同的語(yǔ)句。第2428行屬于簡(jiǎn)單判斷結(jié)構(gòu)。其大致的意思是:如果(if)顯示明細(xì)控件(DetailsViews1)的行數(shù)(Rows)的總數(shù)

32、(Count)大于0,則執(zhí)行其后一對(duì)大括號(hào)內(nèi)的各行語(yǔ)句。沒(méi)有否則(else),或者說(shuō)否則什么也不執(zhí)行,即沒(méi)有符合條件的登錄人,則什么也不做。3.4.2 Session的作用程序第26行使用了Session。1. 什么是SessionSession,有人將其翻譯為“會(huì)話”,即網(wǎng)頁(yè)間互相通信。它就如同現(xiàn)實(shí)生活中的傳遞小道消息的人一樣,從一個(gè)網(wǎng)頁(yè)傳遞數(shù)據(jù)到另一個(gè)網(wǎng)頁(yè)。其實(shí)際功能是保存網(wǎng)站的各個(gè)網(wǎng)頁(yè)共用的數(shù)據(jù)。2. Session例子比如本網(wǎng)頁(yè)中,聲明了一個(gè)名為isLogin的Session,于是在所有網(wǎng)頁(yè)中,就誕生了一個(gè)名為isLogin的公共數(shù)據(jù)。如果不為isLogin指定值,則其值為null,即

33、空值?,F(xiàn)在,本網(wǎng)頁(yè)指定其值為“1”,其它網(wǎng)頁(yè)就可以根據(jù)其值是否為“1”來(lái)判斷用戶是否已登錄。當(dāng)然,其它網(wǎng)頁(yè)的程序語(yǔ)句也可以將其設(shè)為其它值。3. Session寫法注意:這個(gè)關(guān)鍵詞的第一個(gè)字母一定要大寫。定義一個(gè)Session的方法為:先寫出Session這個(gè)關(guān)鍵字。然后在Session一詞后用“ ”符號(hào)將數(shù)據(jù)的名字引起來(lái),例如Session“countryName”、Session“userID”等。4. Session的排它性網(wǎng)站是供多人訪問(wèn)的,一個(gè)網(wǎng)站可能有多人同時(shí)在訪問(wèn)。如果這個(gè)網(wǎng)站的某個(gè)網(wǎng)頁(yè)使用了一個(gè)Session,則有多少人打開(kāi)了本網(wǎng)頁(yè),則網(wǎng)站所在服務(wù)器就會(huì)為每一個(gè)用戶單獨(dú)保存一個(gè)S

34、ession值。因此,可以說(shuō)Session是屬于個(gè)人的,Session保存在網(wǎng)絡(luò)服務(wù)器內(nèi),它能夠識(shí)別不同的訪問(wèn)者,兩個(gè)人即使同時(shí)訪問(wèn)一個(gè)網(wǎng)站,其中的一個(gè)人也不可能得到另外一個(gè)人的Session值。5. Session的使用時(shí)限一個(gè)用戶的Session值不會(huì)在服務(wù)器上永久保存,服務(wù)器默認(rèn)某個(gè)用戶的Session自產(chǎn)生到20分鐘后,自動(dòng)清除,這也就意味著,即使正確登錄的用戶,20分鐘后,會(huì)自動(dòng)變成非法用戶,訪問(wèn)者要想繼續(xù)瀏覽本網(wǎng)站,就必須重新登錄。但程序員在設(shè)計(jì)時(shí),可以根據(jù)實(shí)際需要設(shè)置Session的時(shí)限長(zhǎng)度,設(shè)置語(yǔ)句為:Session.Timeout=x;(x為分鐘數(shù))。很多購(gòu)物網(wǎng)站考慮到用戶通

35、過(guò)網(wǎng)頁(yè)選擇商品時(shí)會(huì)花較長(zhǎng)時(shí)間,因此,會(huì)在每一個(gè)網(wǎng)頁(yè)中將Session值設(shè)置為60或更長(zhǎng)一些。這樣,每當(dāng)用戶打開(kāi)新網(wǎng)頁(yè)時(shí),Session時(shí)效也就會(huì)自動(dòng)延長(zhǎng)。不要隨意使用Session在編寫網(wǎng)頁(yè)時(shí),如果大量使用Session,則一旦同時(shí)在線人數(shù)上升,可能很快導(dǎo)致服務(wù)器崩潰。這是因?yàn)槿绻粋€(gè)網(wǎng)站有100萬(wàn)人在線,即有100萬(wàn)臺(tái)電腦正在打開(kāi)著本網(wǎng)站的網(wǎng)頁(yè),每個(gè)人有10個(gè)Session,則服務(wù)器上就會(huì)產(chǎn)生并保存有1000萬(wàn)個(gè)和Session相關(guān)的信息。3.4.3 Response的作用程序第27行使用了Response。1. 什么是ResponseResponse,響應(yīng),即用戶即將看到的下一個(gè)網(wǎng)頁(yè)。2.

36、 常用的Response命令常用的Response命令(專業(yè)術(shù)語(yǔ)叫方法)有兩個(gè)。一個(gè)是Redirect方法,其作用是打開(kāi)下一個(gè)網(wǎng)頁(yè)。另一個(gè)是Write方法,其作用是在將要打開(kāi)的網(wǎng)頁(yè)上添加文字。Redirect方法的語(yǔ)法格式為:Response.Redirect("網(wǎng)頁(yè)名?參數(shù)1=值1&參數(shù)2=值2&");其中網(wǎng)址格式為:例如:Response.Redirect("用戶登錄.aspx"); Response.Redirect("");Response.Redirect("歡迎.aspx?登錄人=胡家寶&

37、性別=1"); 。3. Response命令的變化形式在計(jì)算機(jī)執(zhí)行第27行語(yǔ)句時(shí),計(jì)算機(jī)先要取得HiddenField.Value的值,比如登錄框中輸入的是“胡家寶”,則HiddenField.Value就會(huì)首先轉(zhuǎn)變?yōu)椤昂覍殹?,然后再進(jìn)行“+”運(yùn)算。"歡迎.aspx?登錄人=" + "胡家寶"的結(jié)果即"歡迎.aspx?登錄人=胡家寶"。最后再執(zhí)行Response.Redirect("歡迎.aspx?登錄人=胡家寶");。執(zhí)行結(jié)果是打開(kāi)了歡迎網(wǎng)頁(yè)。讀者可以從瀏覽器的地址欄中清晰的看出新網(wǎng)頁(yè)的網(wǎng)址。3.4.

38、4 程序工作原理圖3-32畫出了登錄過(guò)程的內(nèi)部機(jī)制。通過(guò)圖示可以看出,兩個(gè)事件程序在登錄過(guò)程中起了關(guān)鍵的作用,其它步驟都是自動(dòng)完成的。程序賦值用戶登錄數(shù)據(jù)庫(kù)隱藏輸入控件 數(shù)據(jù)源控件得到條件依據(jù)條件取數(shù)顯示詳情控件取數(shù)結(jié)果歡迎.aspx件程序判斷如果顯示數(shù)據(jù)>0條 Autenticate事件ItemCreated事件圖3-32 登錄過(guò)程3.4.5 防止非法訪問(wèn)凡是要求登錄才能訪問(wèn)到的網(wǎng)頁(yè),都包含有檢查是否登錄的程序,程序判斷如果未登錄,則要么顯示空白頁(yè)并提示“禁止匿名訪問(wèn)”、“無(wú)權(quán)訪問(wèn)”等,要么直接回到登錄頁(yè)請(qǐng)?jiān)L者先完成登錄。這樣才能防止有些訪問(wèn)者不登錄而直接訪問(wèn)網(wǎng)頁(yè),例如不登錄而直接在瀏

39、覽器的地址欄內(nèi)輸入網(wǎng)址的方法打開(kāi)歡迎網(wǎng)頁(yè)。編寫防止非法訪問(wèn)程序的步驟如下:1. 停止運(yùn)行程序,在設(shè)計(jì)狀態(tài)下,切換到“歡迎.aspx”網(wǎng)頁(yè)的設(shè)計(jì)界面。2. 雙擊網(wǎng)頁(yè)空白處,打開(kāi)“歡迎.aspx.cs”程序錄入窗口。3. 在Page_Load事件中,輸入如圖3-33所示的第1619行程序。圖3-33 防止非法訪問(wèn)網(wǎng)頁(yè)的程序設(shè)計(jì)完成后,運(yùn)行網(wǎng)頁(yè),檢驗(yàn)所設(shè)計(jì)功能是否已實(shí)現(xiàn):試驗(yàn)輸入正確用戶名/密碼,再單擊“登錄”按鈕后,應(yīng)進(jìn)入歡迎網(wǎng)頁(yè);之后再試驗(yàn)輸入錯(cuò)誤的用戶名/密碼,再單擊“登錄”按鈕后,應(yīng)在登錄框內(nèi)出現(xiàn)“登錄失敗,請(qǐng)重試”。至此,登錄網(wǎng)頁(yè)和登錄用戶才能訪問(wèn)的網(wǎng)頁(yè)已實(shí)現(xiàn)了“基本的權(quán)限管理功能”。知識(shí)

40、點(diǎn)滴:1. 關(guān)于Page_Load網(wǎng)頁(yè)需要先生成,或者說(shuō)需要先加載(Load),之后才能從服務(wù)器端發(fā)送到訪問(wèn)者的機(jī)器,訪問(wèn)者的瀏覽器內(nèi)才能顯示網(wǎng)頁(yè)。生成過(guò)程本身即會(huì)引發(fā)Page_Load事件,這個(gè)事件是網(wǎng)頁(yè)本身固有的,它發(fā)生在網(wǎng)頁(yè)剛剛開(kāi)始生成時(shí)。在Page_Load事件內(nèi)如果禁止訪問(wèn)本網(wǎng)頁(yè),瀏覽器肯定無(wú)法獲取本網(wǎng)頁(yè)的內(nèi)容。2. 關(guān)于比較運(yùn)算符“= =”:只用于判斷語(yǔ)句中,比較兩側(cè)值是否相等?!? =”:只用于判斷語(yǔ)句中,比較兩側(cè)值是否不相等; 例如:if ( x= =3) 則意思是如果x的值和3是相等的,則執(zhí)行某些語(yǔ)句。除了上述兩個(gè)比較運(yùn)算符外,還有如“>”、“<”、“>=”

41、、“<=”、等。單個(gè)“=”號(hào)表示賦值。例如:int x =3; ,即讓整型變量x等于3。3. 關(guān)于判斷語(yǔ)句本段程序中使用了一個(gè)標(biāo)準(zhǔn)的判斷語(yǔ)句。由于判斷后要執(zhí)行的語(yǔ)句都是單條語(yǔ)句,因此,沒(méi)有必要使用成對(duì)的大括號(hào)。如果要執(zhí)行的是兩條或更多語(yǔ)句,則必須使用成對(duì)大括號(hào)將這些語(yǔ)句括起來(lái)。4. 關(guān)于地址欄在Default.aspx網(wǎng)頁(yè)中,“Response.Redirect("歡迎.aspx?登錄人=");”一句的作用是開(kāi)一個(gè)“歡迎.aspx”網(wǎng)頁(yè),并將登錄人的值傳給此頁(yè)。運(yùn)行Default.aspx網(wǎng)頁(yè),完成登錄,會(huì)發(fā)現(xiàn)網(wǎng)頁(yè)跳轉(zhuǎn)至“歡迎.aspx”網(wǎng)頁(yè),地址欄會(huì)顯示圖3-34所

42、示樣式。圖3-34 “歡迎.aspx”的地址欄圖中的地址欄一片混亂,主要原因是地址欄不可以顯示中文字符,每個(gè)中文字符到地址欄內(nèi)時(shí),需要翻譯成長(zhǎng)度不等的以%開(kāi)頭的數(shù)字。圖中的真實(shí)地址應(yīng)為:http:/localhost:4464/蜘蛛網(wǎng)/歡迎.aspx?登錄人=zhang其中,前面的“http:/localhost:4464”為VS2005使用特殊的Asp.Net2.0技術(shù)在讀者電腦中模擬服務(wù)器形成的IP地址。3.4.6 Request的作用程序第19行使用了Request。1. 什么是RequestRequest的中文意思是請(qǐng)求、要求。即獲取上一個(gè)網(wǎng)頁(yè)傳給本網(wǎng)頁(yè)的信息。1、 常用的Reques

43、t常用的Request格式有四種:(1) Request.QueryString"數(shù)據(jù)名"-從地址欄內(nèi)獲得數(shù)據(jù);(2) Request. Form"控件名"-從提交網(wǎng)頁(yè)內(nèi)的某控件中獲取數(shù)據(jù);(3) Request.Cookies"數(shù)據(jù)名"-從網(wǎng)頁(yè)在本機(jī)共享消息集中獲取數(shù)據(jù);(4) Request"數(shù)據(jù)名"-從上述所有方面查找所要的數(shù)據(jù);2. 本程序中的Request本程序中,Request“登錄人”,相當(dāng)于Request.QueryString"登錄人",用于獲致地址欄中的“登錄人”的值。Req

44、uest獲取值以后,程序通過(guò)賦值語(yǔ)句“Label1=”使得標(biāo)簽得到“zhang”這一數(shù)據(jù),之后顯示在網(wǎng)頁(yè)上。3.4.7 Cookie的作用上一節(jié)中涉及到了一個(gè)新詞Cookie。它不常用,但很多書籍經(jīng)常提到。1. 什么是CookieCookie:小甜餅(西餐)。它的英文意義和網(wǎng)頁(yè)沒(méi)有什么關(guān)系。其真實(shí)作用是網(wǎng)頁(yè)訪問(wèn)者本機(jī)上的用于一個(gè)網(wǎng)站各網(wǎng)頁(yè)間的共享數(shù)據(jù)集。而Session則是在網(wǎng)絡(luò)服務(wù)器上的為每個(gè)訪問(wèn)者單獨(dú)保存的用于一個(gè)網(wǎng)站各網(wǎng)頁(yè)間的共享數(shù)據(jù)集。2. Cookie有什么作用比如郵箱的用戶名、密碼等,都有一個(gè)“記住我”的功能。這一功能都是使用Cookie實(shí)現(xiàn)的,一旦選中“記住我”功能,網(wǎng)頁(yè)就會(huì)將所

45、選中的信息寫入在訪問(wèn)者的硬盤中。因此,可以說(shuō),Cookie的服務(wù)對(duì)象就是本網(wǎng)站、本機(jī)、本人。有些惡意網(wǎng)站、病毒、木馬會(huì)搜索Cookie并通過(guò)互聯(lián)網(wǎng)將其發(fā)送到“惡人”手中,很多人的QQ號(hào)、網(wǎng)上賬號(hào)等,就是通過(guò)這一途徑被盜的。因此,網(wǎng)站設(shè)計(jì)者不應(yīng)使用Cookie保存重要信息,盡量少用或不用Cookie,而用數(shù)據(jù)庫(kù)代替Cookie。讀者在使用公共電腦上網(wǎng)時(shí),也不要選中Cookie類功能。但我們沒(méi)有簡(jiǎn)單辦法了解一個(gè)網(wǎng)站是否在“悄悄地”收集和保存一個(gè)人上網(wǎng)的信息。因此,一般瀏覽器都提供有一個(gè)設(shè)置,禁止/開(kāi)啟Cookie功能。3. 如何讀寫CookieVS2005考慮到了Cookie容易透漏信息的弊端,在

46、保存Cookie時(shí),采用了Advanced Encrypted Standards (AES)算法進(jìn)行加密/解密。不進(jìn)行破解就不可能看到Cookie中的真實(shí)值。本章實(shí)例沒(méi)有使用Cookie,也不推薦使用Cookie,因此,讀者沒(méi)有必要練習(xí),本書在此僅給出記住登錄框中的用戶名(即具體保存/讀出Cookie)的語(yǔ)句供參考:寫入(可以寫在DetailsView1_ItemCreated事件對(duì)應(yīng)程序內(nèi)):HttpCookie myCookie = new HttpCookie("userID");/新建一個(gè)代號(hào)myCookie實(shí)名為UserID的小甜餅myCookie.Value

47、= "李銀鎖" /為此小甜餅賦值Response.AppendCookie(myCookie); /保存它到個(gè)人電腦的磁盤內(nèi)讀出:(一般寫在Page_Load事件程序內(nèi))Label1.Text = Request.Cookies"username".Value.ToString();3.1 添加驗(yàn)證碼生成頁(yè)登錄網(wǎng)站時(shí),如果僅通過(guò)用戶名和密碼登錄,非法用戶使用簡(jiǎn)單手段就可以破解。因此,對(duì)于安全性要求較高、不希望經(jīng)常被攻擊、騷擾的網(wǎng)站,很有必要采取一些防護(hù)措施,其中一個(gè)常用技術(shù)即使用驗(yàn)證碼。3.5.1 什么是驗(yàn)證碼驗(yàn)證碼就是一幅小圖片,其中的數(shù)字或符號(hào)是隨機(jī)

48、產(chǎn)生,用戶可以通過(guò)肉眼識(shí)別出其中的驗(yàn)證碼信息,然后在驗(yàn)證碼輸入框中輸入驗(yàn)證碼。如果用戶名、密碼、驗(yàn)證碼全部輸入正確,才能通過(guò)登錄驗(yàn)證,成為合法用戶。驗(yàn)證碼圖片一般都會(huì)添加一些干擾因素,如顏色變化、字形變化等,以防止非法訪問(wèn)者通過(guò)簡(jiǎn)單的程序即可識(shí)別出。驗(yàn)證碼技術(shù)已成為一種必需采用的網(wǎng)站安全技術(shù)。典型的如百度貼吧:要在百度發(fā)貼之前,就必須入驗(yàn)證碼(見(jiàn)圖3-36)。圖3-36 百度貼吧3.5.2 驗(yàn)證碼的作用驗(yàn)證碼一般是防止有人利用機(jī)器人自動(dòng)批量登錄、對(duì)特定的登錄用戶用特定程序暴力破解方式進(jìn)行不斷的登陸、灌水,甚至控制網(wǎng)絡(luò)服務(wù)器,盜取數(shù)據(jù)、篡改網(wǎng)站(即被黑)。因?yàn)轵?yàn)證碼是一個(gè)混合了數(shù)字或漢字、符號(hào)的

49、圖片,人眼識(shí)別有時(shí)都很費(fèi)力,通過(guò)計(jì)算機(jī)自動(dòng)識(shí)別就更加困難。這就為攔住惡意訪問(wèn)者設(shè)立了一道較難逾越的高墻。網(wǎng)絡(luò)服務(wù)器生成驗(yàn)證碼需要加重服務(wù)器負(fù)擔(dān)并會(huì)占用訪問(wèn)者一定的等待時(shí)間。但不能為了細(xì)節(jié)的良好體驗(yàn)而降低系統(tǒng)的安全性。所以,驗(yàn)證碼一定要有,但“驗(yàn)證碼”不一定要設(shè)計(jì)的過(guò)于太復(fù)雜。簡(jiǎn)單的說(shuō),驗(yàn)證碼要起到必要的驗(yàn)證和防護(hù)的作用,應(yīng)做到以下兩點(diǎn):1. 最好在45位隨機(jī)字符或數(shù)字,太少很容易被機(jī)器自動(dòng)識(shí)別或匹配出來(lái),太多會(huì)影響用戶心情。2. 可以通過(guò)顏色、背景圖片的適度增加識(shí)別難度。3.5.3 添加驗(yàn)證碼生成頁(yè)驗(yàn)證碼不是隨機(jī)從電腦中取出的已存放在電腦中的圖片,而是由網(wǎng)頁(yè)后臺(tái)程序(即文件擴(kuò)展名為XXXX.aspx.cs中的程序)在網(wǎng)頁(yè)上逐筆“畫”出來(lái)的。因此,這種程序很復(fù)雜,普通編程人員很難掌握生成技術(shù),但互聯(lián)網(wǎng)上有大量公開(kāi)的專業(yè)人員編寫的此類程序供“免費(fèi)”采用。站在專業(yè)人員的肩上,很容易做到一個(gè)普通人做不到的事情。提示:1. 運(yùn)行網(wǎng)頁(yè)后臺(tái)程序“驗(yàn)證碼.apx.cs”和運(yùn)行網(wǎng)頁(yè)界面文件“驗(yàn)證碼.aspx”結(jié)果是一樣的。每次運(yùn)行,都會(huì)產(chǎn)生一個(gè)含有4位隨機(jī)數(shù)的圖片(圖3

溫馨提示

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

評(píng)論

0/150

提交評(píng)論