




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、ASP3.0高級編程(二) 1、 訪問ASP集合的一般技術大多數ASP集合與在VB中見到的普通集合相差不多。實際上,它們是值的數組,但能通過使用一個文本字符串鍵(對大小不敏感)以及一個整型索引進行訪問。因此,假如客戶端Web頁面包含的<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>可通過訪問ASP的Form集合來訪問其控件內的值:strFirstName = Request.Form(“FirstName”)strLastName = Request.Form(“LastName”)也可使用窗體中控件的整型索引,索引的范圍從在HTML中第一個定義的控件開始,然后根據定義的順序排序:strFirst
3、Name = Request.Form(1)strLastName = Request.Form(2)然而,后面的這種以整型為索引的技術不推薦使用,因為一旦有HTML中的控件發生了變化,或者插入一個新的控件,則ASP代碼將得到錯誤的值。進一步而言,對于閱讀代碼的人來講,極容易混淆。1) 訪問集合的全部值可以通過引用集合把整個Form上的一系列值變成單個的字符變量,且不用提供鍵或索引。StrAllFormContent = Request.Form假如文本框包含值Priscilla和Descartes,則Request.For
4、m語句將返回下列字符:FirstName=Priscilla&LastName=Descartes注意,提供的值是以名稱/值對的形式出現的(即控件名稱=控件值),并且每一對名稱/值相互之間是用符號“&”相分隔的。假如打算把窗體中的內容傳遞單獨的,希望得到值的標準格式的可執行應用程序或DLL,這個技術是很有用的。然而,一般說來,都是通過以窗體中控件的名稱為文本鍵來訪問集合中的內容。2) 遍歷一個ASP集合有兩種方式遍歷一個ASP集合中的所有成員,方式與普通VB集合的基本相同。每個集合提供一個Count屬性,返回的是集合中條目數量。可通過使用一個整型索引使用Count屬性
5、來遍歷。For intLoop=1 To Request.Form.CountResponse.Write Request.Form(intLoop) & “<BR>”Next假如先前的窗體包含Priscilla和Descartes值的兩個文本框,將得到如下結果:PriscillaDescartes然而,更好的方法是使用For Each.Next結構。For Each objItem In Request.FormResponse.Write objIte
6、m & “=” & Request.Form(objItem) & “<BR>”Next這帶來的好處是既可以訪問控件的名稱又可訪問其值。上述代碼將得到如下結果:FirstName = PriscillaLastName = Descartes注意,一些瀏覽器返回到ASP的<FORM>值可能與頁面上顯示的順序不盡相同。3) 集合成員的多值性在某些情況下,ASP集合中的各個成員可能不止一個值,這種情況發生在HTML定義中有幾個控件有相同Nam
7、e屬性時。例如:<FORM ACTION=”Show_request.asp” METHOD=”POST”><INPUT TYPE=”TEXT” NAME=”OtherHobby”><INPUT TYPE=”TEXT” NAME=”OtherHobby”><INPUT TYPE=”TEXT” NAME=”OtherHobby”><INPUT TYPE=”SUBMIT” VALUE=”Send”></FORM>在Form集合中
8、,將為“OtherHobby”創建一個條目。然而,它將包括從三個文本框中得到的值。假如在提交時,用戶留下了一個或多個為空,則返回的值為空字符串。假如用戶在第一和第三個文本框分別輸入Gardening和Mountaineering,第二個文本框為空,在我們的ASP代碼中訪問Request.Form(“OtherHobby”),將返回字符串:Gardening, ,Mountaineering為了能夠在這種情況下,訪問單個值,可以用復雜一些的代碼: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對于前面的包含三個OtherHobby控件的窗體實例,這將返回:OtherHobby:Subkey
11、60;1 value = GardeningSubkey 2 value = Subkey 3 value = Mountaineering然而,由于很少給多個文本框相同的名字,因此這種技術很少用到。a) HTML中的單選或選頁按鈕控件在HTML中,需要給幾個控件相同的Name屬性的情況是單選(或選項)按鈕,例如:<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>因為用戶只能選擇多項中的一個(這就是給它們相同的名字的原因),將僅得到一個返回值,瀏覽器只能發送所選擇控件的值。因此,假如這個窗體的用戶已經選擇了“Europez”,將得到這個條目,通過遍歷Form集得到其值:Country = EU由于為每個控件提供了不同的VALUE屬性,反映了每個條目所對應的國家或地區的名稱。假如省略了VALUE屬性,瀏覽器將返回的值為“on”,因此將得到:Country = on這是不經常用到的,因此一般對使用相同名稱的單選控件使用VALUE屬性。b) HTML復選框控件當一個窗體中HTML源碼包含
14、一個復選框控件時,一般都給定唯一的名稱,例如:<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>在這種情況下,提交窗體時,假如僅是第一和第三個復選框被選中(加標記),遍歷Form集合時,會得到下列值:Reading = onSleeping = on然而,假如為每個復選框提供一個值,把這個值發往服務器代替字符串“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>如果除第三個復選框外,全部提交,在Request.Form集合會產生下列結果:Hobby = Hobby025, Hobby003, Hobby010假如編寫更復雜一些集合遍歷代碼,如先前所述(單獨顯示每個子鍵),就得到這樣結果:Hobby:Subkey 1 valu
18、e = Hobby025Subkey 2 value = Hobby003Subkey 3 value = Hobby010需要注意的是兩種情況,沒有選中的控件根本不返回任何值。在第一種情況的結果里,沒有欺騙性的逗號,第二種情況也沒有空值。這與上述的使用文本框的相當的測試的結果不一樣。使用文本框時,每個文本框都返回一個值,即使是一個空字符串。這是瀏覽器造成這樣的結果。因此在ASP代碼中訪問集合時,要注意這個問題。上述情況一個棘手的負作用是使用復選框時,復選框值的索引與在原始的HTML中控件的位置
19、沒有任何聯系,在上述的例子中第四個復選框的子鍵數為3,因為當窗體提交時,第二個控件沒有選中。c) HTML列表控件HTML中的<SELECT>標記用來產生標準的下拉列表框,其值以一種有趣的混合方式表示。下列的窗體創建了包含5個值可供用戶選擇,由于包含了MULTIPLE屬性,因此可以通過選擇時按下Shift或Ctrl鍵,選擇不僅一個的條目。<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>下圖所示為該頁面,顯示的是選中了三個條目。 這種特殊的情況返回的是在Form集合中單個條目,它包含選擇的值(單個的<OPTION>標記中指定的VALUE屬性),用逗號分隔:Hobby = Hobby025, Hobby003, Hobby010假如使用更加復雜一些的集合遍歷代碼(單獨顯示每個子鍵),將得到:Hobby:Subkey 1 value
22、;= Hobby025Subkey 2 value = Hobby003Subkey 3 value = Hobby010這與上述相同名稱的復選框的情況相同。事實上可以認為一個SELECT列表是一列復選框的列表供選擇(不是選中)相應的條目。然而,列表框也有指定的值,假如在<OPTION>標記中設置VALUE屬性,將得到的是選擇的選項的文本內容,Request.Form集將包含這樣一個項目:Hobby = Swimming, Reading, Sleepi
23、ng并且,同樣,復雜一些的集合遍歷代碼將返回如下結果:Hobby:Subkey 1 value = SwimmingSubkey 2 value = ReadingSubkey 3 value = Sleeping當然,假如單個項目被選擇,且在<OPTION>中提供了VALUE屬性,得到結果包含的僅是:Hobby = Hobby025如果沒有提供VALUE屬性,得到:Hobby = Swimming這允許既可以缺省(即無VA
24、LUE)顯示選項文本,也可做相應的改變。后一種情況在某些情況下是極為有用的,如要顯示(一個說明的字符串)和傳遞一個完全不同的內容(如用一個短碼代表一個說明性的字符串)。d) HTML提交和圖像控件復選框和單選框是布爾型控件的例子,選中或選擇返回的為“on”,不像文本框和大多數其他的HTML控件,瀏覽器不包含沒有選中或沒有選擇的控件的值。還有另外一種常用的布爾型控件,稱為HTML按鈕。如<INPUT TYPE=”SUBMIT”>、<INPUT TYPE=”RESET”>、<INPUT TYPE=”IMAGE”>、<
25、INPUT TYPE=”BUTTON”>和<BUTTON>.</BUTTON>類型。BUTTON類型的控件不返回任何值,因其對窗體沒有直接的影響。即使使用用來調用窗體的Submit方法,瀏覽器在任何請求中將不包含BUTTON類型控件的值。同樣,一個<INPUT TYPE=”RESET”>按鈕的值也決不會發往服務器。然而,輸入按鈕控件SUBMIT和IMAGE類型實際提交窗體給服務器,其VALUE屬性包含窗體的其他控件的值(只要在HTML定義中包含一個NAME屬性)。例如,這個窗體可能是向導類型Web應用程序的一部分,允許用戶一步步進行
26、或取消進程:<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;在一個窗體中,可以包括多個SUBMIT按鈕。在這種情況下,應該給每一個按鈕唯一的VALUE屬性,如上所示。當一個窗體被提交時,遍歷Request.Form集合的值,將產生一個值,這個值依賴于按下哪個按鈕用于提交這個窗體。假如用戶按下的“Previous”按鈕,將得到:btnSubmit = Previous因此,可查詢Request.Form集合來決定下一個顯示的頁面,例如: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同時,也可根據需要對每個按鈕使用不同的NAME屬性。且選擇其值包含在Form集合中的控件名稱。在控件沒有一個完整的標記而是隨后跟著較長的文本標簽的情況下,極為有用,如下圖所示。此屏幕上的界面由下列代碼產生:<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頁面中,接收到數據后,可以檢查按扭名稱提供的值來判斷按下的是哪個按鈕。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”這個工作是查詢一個鍵上的ASP集合,如果不存在則返回一個空的字符串。換句話說,如果第二個按鈕(previous頁)按下,則Reques
32、t.Form(“btnNext”)的值是一個空字符串,則其長度為零而不至于產生一個錯誤。當第二個按鈕按下時,則在Form集合中這個條目的值Request.Form(“btnPrevious”),將是“ ”其長度大于零。e) 提高使用Request集合的效率訪問一個ASP集合來下載一個值是費時的需計算資源的過程,因為這個操作包含了一系列對相關集合的搜索,這比訪問一個局部變量要慢得多。因此,如果打算在頁面中多次使用集合中的一個值,應該考慮將其存貯成為一個局部變量,例如: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集合在某些情況下,可能知道一個值的鍵名將出現在Request集合中,但不能準確地知道是哪一個集合。例如,假如有幾個頁面(或一個頁面的不同段)發送一個值給同一個ASP腳本,它可能在Form或者QueryString集合中出現。本章后面部分將研究Form和QueryString集合的差異。要看一下一個值為什么可能出現在不同的集合中,考慮一下這種情況:使用了<A>超級鏈接元素請求一個頁面。在這種情況下,增加一個值到請求的唯一方法是把它加到URL上。然而,同樣的值可能已出現在另一個頁面的<FORM>中,或同一頁面不同部分:.<FORM ACTION=”process_page.asp” METHOD=”POST”><INPUT TYPE=”SUBMIT” NAME=”page”
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 攀枝花2025年攀枝花市鹽邊縣事業單位新一輪引才17人筆試歷年參考題庫附帶答案詳解
- 2025至2031年中國氟塑料增強合金自吸泵行業投資前景及策略咨詢研究報告
- 2025至2031年中國指甲器行業投資前景及策略咨詢研究報告
- 特殊教育觸覺板企業制定與實施新質生產力項目商業計劃書
- 電子書訂閱服務與會員制度行業深度調研及發展項目商業計劃書
- 2025至2031年中國地埋式旋轉門開門機行業投資前景及策略咨詢研究報告
- 電視廣告在線平臺行業深度調研及發展項目商業計劃書
- 創意攝影旅游線路行業深度調研及發展項目商業計劃書
- 智能家居仿生溫控系統行業跨境出海項目商業計劃書
- 木材雕塑創作在線平臺行業深度調研及發展項目商業計劃書
- GB/T 22795-2008混凝土用膨脹型錨栓型式與尺寸
- 2022年重慶高考物理試卷真題及答案詳解(精校版)
- 藍莓栽培技術課件
- 廣州市人力資源和社會保障局事業單位招聘工作人員【共500題附答案解析】模擬檢測試卷
- 部編五年級下冊道德與法治第二單元《公共生活靠大家》知識要點復習課件
- 清淤工程施工記錄表
- 商法案例英文版ppt全套教學課件
- 2021年浙江省杭州市西湖區杭州綠城育華小學一級下冊期末數學試卷
- 科技改變生活-PPT課件
- K-H-V行星齒輪減速器 瞿鴻鵬
- 病毒TCID50測定參考模板
評論
0/150
提交評論