ASP3.0高級(jí)編程(二)_第1頁(yè)
ASP3.0高級(jí)編程(二)_第2頁(yè)
ASP3.0高級(jí)編程(二)_第3頁(yè)
ASP3.0高級(jí)編程(二)_第4頁(yè)
ASP3.0高級(jí)編程(二)_第5頁(yè)
已閱讀5頁(yè),還剩3頁(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、ASP3.0高級(jí)編程(二)      1、 訪問(wèn)ASP集合的一般技術(shù)大多數(shù)ASP集合與在VB中見(jiàn)到的普通集合相差不多。實(shí)際上,它們是值的數(shù)組,但能通過(guò)使用一個(gè)文本字符串鍵(對(duì)大小不敏感)以及一個(gè)整型索引進(jìn)行訪問(wèn)。因此,假如客戶端Web頁(yè)面包含的<FORM>如下:<FORM ACTION=”show_request.asp” METHOD=”POST”>FirstName:<INPUT TYPE=”TEXT” NAME=”FirstName”>Last

2、Name:<INPUT TYPE=”TEXT” NAME=”LastName”><INPUT TYPE=”SUBMIT” VALUE=”Send”></FORM>可通過(guò)訪問(wèn)ASP的Form集合來(lái)訪問(wèn)其控件內(nèi)的值:strFirstName = Request.Form(“FirstName”)strLastName = Request.Form(“LastName”)也可使用窗體中控件的整型索引,索引的范圍從在HTML中第一個(gè)定義的控件開(kāi)始,然后根據(jù)定義的順序排序:strFirst

3、Name = Request.Form(1)strLastName = Request.Form(2)然而,后面的這種以整型為索引的技術(shù)不推薦使用,因?yàn)橐坏┯蠬TML中的控件發(fā)生了變化,或者插入一個(gè)新的控件,則ASP代碼將得到錯(cuò)誤的值。進(jìn)一步而言,對(duì)于閱讀代碼的人來(lái)講,極容易混淆。1) 訪問(wèn)集合的全部值可以通過(guò)引用集合把整個(gè)Form上的一系列值變成單個(gè)的字符變量,且不用提供鍵或索引。StrAllFormContent = Request.Form假如文本框包含值Priscilla和Descartes,則Request.For

4、m語(yǔ)句將返回下列字符:FirstName=Priscilla&LastName=Descartes注意,提供的值是以名稱/值對(duì)的形式出現(xiàn)的(即控件名稱=控件值),并且每一對(duì)名稱/值相互之間是用符號(hào)“&”相分隔的。假如打算把窗體中的內(nèi)容傳遞單獨(dú)的,希望得到值的標(biāo)準(zhǔn)格式的可執(zhí)行應(yīng)用程序或DLL,這個(gè)技術(shù)是很有用的。然而,一般說(shuō)來(lái),都是通過(guò)以窗體中控件的名稱為文本鍵來(lái)訪問(wèn)集合中的內(nèi)容。2) 遍歷一個(gè)ASP集合有兩種方式遍歷一個(gè)ASP集合中的所有成員,方式與普通VB集合的基本相同。每個(gè)集合提供一個(gè)Count屬性,返回的是集合中條目數(shù)量。可通過(guò)使用一個(gè)整型索引使用Count屬性

5、來(lái)遍歷。For intLoop=1 To Request.Form.CountResponse.Write Request.Form(intLoop) & “<BR>”Next假如先前的窗體包含Priscilla和Descartes值的兩個(gè)文本框,將得到如下結(jié)果:PriscillaDescartes然而,更好的方法是使用For Each.Next結(jié)構(gòu)。For Each objItem In Request.FormResponse.Write objIte

6、m & “=” & Request.Form(objItem) & “<BR>”Next這帶來(lái)的好處是既可以訪問(wèn)控件的名稱又可訪問(wèn)其值。上述代碼將得到如下結(jié)果:FirstName = PriscillaLastName = Descartes注意,一些瀏覽器返回到ASP的<FORM>值可能與頁(yè)面上顯示的順序不盡相同。3) 集合成員的多值性在某些情況下,ASP集合中的各個(gè)成員可能不止一個(gè)值,這種情況發(fā)生在HTML定義中有幾個(gè)控件有相同Nam

7、e屬性時(shí)。例如:<FORM ACTION=”Show_request.asp” METHOD=”POST”><INPUT TYPE=”TEXT” NAME=”O(jiān)therHobby”><INPUT TYPE=”TEXT” NAME=”O(jiān)therHobby”><INPUT TYPE=”TEXT” NAME=”O(jiān)therHobby”><INPUT TYPE=”SUBMIT” VALUE=”Send”></FORM>在Form集合中

8、,將為“OtherHobby”創(chuàng)建一個(gè)條目。然而,它將包括從三個(gè)文本框中得到的值。假如在提交時(shí),用戶留下了一個(gè)或多個(gè)為空,則返回的值為空字符串。假如用戶在第一和第三個(gè)文本框分別輸入Gardening和Mountaineering,第二個(gè)文本框?yàn)榭?,在我們的ASP代碼中訪問(wèn)Request.Form(“OtherHobby”),將返回字符串:Gardening, ,Mountaineering為了能夠在這種情況下,訪問(wèn)單個(gè)值,可以用復(fù)雜一些的代碼:For Each objItem In Request.FormIf Request.For

9、m(objItem).Count >1 Then More than one value in this itemResponse.Write objItem & “:<BR>”For intLoop = 1 To Request.Form(objItem).CountResponse.Write “Subkey” & intLoop &

10、0;“value = “_& Request.Form(objItem) (intLoop) & “<BR>”NextElseResponse.Write objItem & “ = ” & Request.Form(objItem) & “<BR>”End IfNext對(duì)于前面的包含三個(gè)OtherHobby控件的窗體實(shí)例,這將返回:OtherHobby:Subkey

11、60;1 value = GardeningSubkey 2 value = Subkey 3 value = Mountaineering然而,由于很少給多個(gè)文本框相同的名字,因此這種技術(shù)很少用到。a) HTML中的單選或選頁(yè)按鈕控件在HTML中,需要給幾個(gè)控件相同的Name屬性的情況是單選(或選項(xiàng))按鈕,例如:<FORM ACTION=”show_request.asp” METHOD=”POST”>I live in:

12、<INPUT TYPE=”RADIO” NAME=”Country” VALUE=”AM”>America<BR><INPUT TYPE=”RADIO” NAME=”Country” VALUE=”EU”>Europe<BR><INPUT TYPE=”RADIO” NAME=”Country” VALUE=”AS”>Asia<BR><INPUT TYPE=”SUBMIT” VALUE=”Send”>&l

13、t;/FORM>因?yàn)橛脩糁荒苓x擇多項(xiàng)中的一個(gè)(這就是給它們相同的名字的原因),將僅得到一個(gè)返回值,瀏覽器只能發(fā)送所選擇控件的值。因此,假如這個(gè)窗體的用戶已經(jīng)選擇了“Europez”,將得到這個(gè)條目,通過(guò)遍歷Form集得到其值:Country = EU由于為每個(gè)控件提供了不同的VALUE屬性,反映了每個(gè)條目所對(duì)應(yīng)的國(guó)家或地區(qū)的名稱。假如省略了VALUE屬性,瀏覽器將返回的值為“on”,因此將得到:Country = on這是不經(jīng)常用到的,因此一般對(duì)使用相同名稱的單選控件使用VALUE屬性。b) HTML復(fù)選框控件當(dāng)一個(gè)窗體中HTML源碼包含

14、一個(gè)復(fù)選框控件時(shí),一般都給定唯一的名稱,例如:<FORM ACTION=”show_request.asp” METHOD=”POST”>I enjoy:<INPUT TYPE=”CHECKBOX” NAME=”Reading” CHECKED> Reading <INPUT TYPE=”CHECKBOX” NAME=”Eating”> Eating <INPUT TYPE=”CHECKBOX” NAME=”Sle

15、eping”> Sleeping<INPUT TYPE=”SUBMIT” VALUE=”Send”></FORM>在這種情況下,提交窗體時(shí),假如僅是第一和第三個(gè)復(fù)選框被選中(加標(biāo)記),遍歷Form集合時(shí),會(huì)得到下列值:Reading = onSleeping = on然而,假如為每個(gè)復(fù)選框提供一個(gè)值,把這個(gè)值發(fā)往服務(wù)器代替字符串“on”。例如窗體如下:<FORM ACTION=”show_request.asp” METHOD=”POST”>I enjo

16、y:<INPUT TYPE=”CHECKBOX” VALUE=”Hobby025” NAME=”Hobby” CHECKED>_Swimming <INPUT TYPE=”CHECKBOX” VALUE=”Hobby003” NAME=”Hobby” CHECKED>_Reading <INPUT TYPE=”CHECKBOX” VALUE=”Hobby068” NAME=”Hobby”>Eating <INPUT

17、 TYPE=”CHECKBOX” VALUE=”Hobby010” NAME=”Hobby”>Sleeping<INPUT TYPE=”SUBMIT” VALUE=”Send”></FORM>如果除第三個(gè)復(fù)選框外,全部提交,在Request.Form集合會(huì)產(chǎn)生下列結(jié)果:Hobby = Hobby025, Hobby003, Hobby010假如編寫(xiě)更復(fù)雜一些集合遍歷代碼,如先前所述(單獨(dú)顯示每個(gè)子鍵),就得到這樣結(jié)果:Hobby:Subkey 1 valu

18、e = Hobby025Subkey 2 value = Hobby003Subkey 3 value = Hobby010需要注意的是兩種情況,沒(méi)有選中的控件根本不返回任何值。在第一種情況的結(jié)果里,沒(méi)有欺騙性的逗號(hào),第二種情況也沒(méi)有空值。這與上述的使用文本框的相當(dāng)?shù)臏y(cè)試的結(jié)果不一樣。使用文本框時(shí),每個(gè)文本框都返回一個(gè)值,即使是一個(gè)空字符串。這是瀏覽器造成這樣的結(jié)果。因此在ASP代碼中訪問(wèn)集合時(shí),要注意這個(gè)問(wèn)題。上述情況一個(gè)棘手的負(fù)作用是使用復(fù)選框時(shí),復(fù)選框值的索引與在原始的HTML中控件的位置

19、沒(méi)有任何聯(lián)系,在上述的例子中第四個(gè)復(fù)選框的子鍵數(shù)為3,因?yàn)楫?dāng)窗體提交時(shí),第二個(gè)控件沒(méi)有選中。c) HTML列表控件HTML中的<SELECT>標(biāo)記用來(lái)產(chǎn)生標(biāo)準(zhǔn)的下拉列表框,其值以一種有趣的混合方式表示。下列的窗體創(chuàng)建了包含5個(gè)值可供用戶選擇,由于包含了MULTIPLE屬性,因此可以通過(guò)選擇時(shí)按下Shift或Ctrl鍵,選擇不僅一個(gè)的條目。<FORM ACTION=”show_request.asp” METHOD=”POST”><SELECT NAME=”Hobby” SIZE=”5” MULTIPLE&

20、gt;<OPTION VALUE=”Hobby001”>Programming</OPTION><OPTION VALUE=”Hobby025”>Swimming</OPTION><OPTION VALUE=”Hobby003”>Reading</OPTION><OPTION VALUE=”Hobby068”>Eating</OPTION><OPTION VALUE=”Hobby010”>Sleeping</OPTION>&l

21、t;/SELECT><P><INPUT TYPE=”SUBMIT” VALUE=”Send”></FORM>下圖所示為該頁(yè)面,顯示的是選中了三個(gè)條目。 這種特殊的情況返回的是在Form集合中單個(gè)條目,它包含選擇的值(單個(gè)的<OPTION>標(biāo)記中指定的VALUE屬性),用逗號(hào)分隔:Hobby = Hobby025, Hobby003, Hobby010假如使用更加復(fù)雜一些的集合遍歷代碼(單獨(dú)顯示每個(gè)子鍵),將得到:Hobby:Subkey 1 value 

22、;= Hobby025Subkey 2 value = Hobby003Subkey 3 value = Hobby010這與上述相同名稱的復(fù)選框的情況相同。事實(shí)上可以認(rèn)為一個(gè)SELECT列表是一列復(fù)選框的列表供選擇(不是選中)相應(yīng)的條目。然而,列表框也有指定的值,假如在<OPTION>標(biāo)記中設(shè)置VALUE屬性,將得到的是選擇的選項(xiàng)的文本內(nèi)容,Request.Form集將包含這樣一個(gè)項(xiàng)目:Hobby = Swimming, Reading, Sleepi

23、ng并且,同樣,復(fù)雜一些的集合遍歷代碼將返回如下結(jié)果:Hobby:Subkey 1 value = SwimmingSubkey 2 value = ReadingSubkey 3 value = Sleeping當(dāng)然,假如單個(gè)項(xiàng)目被選擇,且在<OPTION>中提供了VALUE屬性,得到結(jié)果包含的僅是:Hobby = Hobby025如果沒(méi)有提供VALUE屬性,得到:Hobby = Swimming這允許既可以缺?。礋o(wú)VA

24、LUE)顯示選項(xiàng)文本,也可做相應(yīng)的改變。后一種情況在某些情況下是極為有用的,如要顯示(一個(gè)說(shuō)明的字符串)和傳遞一個(gè)完全不同的內(nèi)容(如用一個(gè)短碼代表一個(gè)說(shuō)明性的字符串)。d) HTML提交和圖像控件復(fù)選框和單選框是布爾型控件的例子,選中或選擇返回的為“on”,不像文本框和大多數(shù)其他的HTML控件,瀏覽器不包含沒(méi)有選中或沒(méi)有選擇的控件的值。還有另外一種常用的布爾型控件,稱為HTML按鈕。如<INPUT TYPE=”SUBMIT”>、<INPUT TYPE=”RESET”>、<INPUT TYPE=”IMAGE”>、<

25、INPUT TYPE=”BUTTON”>和<BUTTON>.</BUTTON>類型。BUTTON類型的控件不返回任何值,因其對(duì)窗體沒(méi)有直接的影響。即使使用用來(lái)調(diào)用窗體的Submit方法,瀏覽器在任何請(qǐng)求中將不包含BUTTON類型控件的值。同樣,一個(gè)<INPUT TYPE=”RESET”>按鈕的值也決不會(huì)發(fā)往服務(wù)器。然而,輸入按鈕控件SUBMIT和IMAGE類型實(shí)際提交窗體給服務(wù)器,其VALUE屬性包含窗體的其他控件的值(只要在HTML定義中包含一個(gè)NAME屬性)。例如,這個(gè)窗體可能是向?qū)ь愋蚖eb應(yīng)用程序的一部分,允許用戶一步步進(jìn)行

26、或取消進(jìn)程:<FORM ACTION=”show_request.asp” METHOD=”POST”><INPUT TYPE=”SUBMIT” NAME=”btnSubmit” VALUE=”Next”><INPUT TYPE=”SUBMIT” NAME=”btnSubmit” VALUE=”Previous”><INPUT TYPE=”SUBIMT” NAME=”btnSubmit” VALUE=”Cancel”></FORM&

27、gt;在一個(gè)窗體中,可以包括多個(gè)SUBMIT按鈕。在這種情況下,應(yīng)該給每一個(gè)按鈕唯一的VALUE屬性,如上所示。當(dāng)一個(gè)窗體被提交時(shí),遍歷Request.Form集合的值,將產(chǎn)生一個(gè)值,這個(gè)值依賴于按下哪個(gè)按鈕用于提交這個(gè)窗體。假如用戶按下的“Previous”按鈕,將得到:btnSubmit = Previous因此,可查詢Request.Form集合來(lái)決定下一個(gè)顯示的頁(yè)面,例如:Select Case Request.Form(“btnSubmit”)Case “Next”Response.Redirect “page_3.asp”

28、Case “Previous”Response.Redirect “page_1.asp”Case “Cancel”Response.Redirect “main_menu.asp”End Select同時(shí),也可根據(jù)需要對(duì)每個(gè)按鈕使用不同的NAME屬性。且選擇其值包含在Form集合中的控件名稱。在控件沒(méi)有一個(gè)完整的標(biāo)記而是隨后跟著較長(zhǎng)的文本標(biāo)簽的情況下,極為有用,如下圖所示。此屏幕上的界面由下列代碼產(chǎn)生:<FORM ACTION=”show_request.asp” METHOD=”POST”><B>

29、What do you want to do now?</B><P><INPUT TYPE=”SUBMIT” NAME=”btnNext” VALUE= ”> Go on the next page<P><INPUT TYPE=”SUBMIT” NAME=”btnPrevious” Value=” ”> GO back 

30、;to the previous page<P><INPUT TYPE=”SUBMIT” NAME=”btnCancel” VALUE=” ”> Cancel and go back to the main menu page<P></FORM>在ASP頁(yè)面中,接收到數(shù)據(jù)后,可以檢查按扭名稱提供的值來(lái)判斷按下的是哪個(gè)按鈕。If Len(Request.Form(“btnNext”

31、) Then Response.Redirect “page_3.asp”If Len(Request.Form(“btnPrevious”) Then Response.Redirect “page_1.asp”If Len(Request.Form(“btnCancel”) Then Response.Redirect “main_menu.asp”這個(gè)工作是查詢一個(gè)鍵上的ASP集合,如果不存在則返回一個(gè)空的字符串。換句話說(shuō),如果第二個(gè)按鈕(previous頁(yè))按下,則Reques

32、t.Form(“btnNext”)的值是一個(gè)空字符串,則其長(zhǎng)度為零而不至于產(chǎn)生一個(gè)錯(cuò)誤。當(dāng)?shù)诙€(gè)按鈕按下時(shí),則在Form集合中這個(gè)條目的值Request.Form(“btnPrevious”),將是“ ”其長(zhǎng)度大于零。e) 提高使用Request集合的效率訪問(wèn)一個(gè)ASP集合來(lái)下載一個(gè)值是費(fèi)時(shí)的需計(jì)算資源的過(guò)程,因?yàn)檫@個(gè)操作包含了一系列對(duì)相關(guān)集合的搜索,這比訪問(wèn)一個(gè)局部變量要慢得多。因此,如果打算在頁(yè)面中多次使用集合中的一個(gè)值,應(yīng)該考慮將其存貯成為一個(gè)局部變量,例如:strTitle = Request.Form(“Title”)strFirstName&

33、#160;= Request.Form(“FirstName”)strLastName = Request.Form(“LastName”)If Len(stTitle) Then strTitle = strTitle & “ “If strFirstName = “ “ ThenStrFullName = strTitle & “ “ & 

34、strLastNameElseIf Len(strFirstName) = 1 ThenStrFullName = strTitle & strFirstName & “· “ & strLastNameElseStrFullName = strTitle & strFirstName & “ ” & strLastNa

35、meEnd Iff) 搜索所有的Request集合在某些情況下,可能知道一個(gè)值的鍵名將出現(xiàn)在Request集合中,但不能準(zhǔn)確地知道是哪一個(gè)集合。例如,假如有幾個(gè)頁(yè)面(或一個(gè)頁(yè)面的不同段)發(fā)送一個(gè)值給同一個(gè)ASP腳本,它可能在Form或者QueryString集合中出現(xiàn)。本章后面部分將研究Form和QueryString集合的差異。要看一下一個(gè)值為什么可能出現(xiàn)在不同的集合中,考慮一下這種情況:使用了<A>超級(jí)鏈接元素請(qǐng)求一個(gè)頁(yè)面。在這種情況下,增加一個(gè)值到請(qǐng)求的唯一方法是把它加到URL上。然而,同樣的值可能已出現(xiàn)在另一個(gè)頁(yè)面的<FORM>中,或同一頁(yè)面不同部分:.<FORM ACTION=”process_page.asp” METHOD=”POST”><INPUT TYPE=”SUBMIT” NAME=”page”

溫馨提示

  • 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)論