萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> asp編程 >> ASP中使用Form和QueryString集合

ASP中使用Form和QueryString集合

當用戶填寫頁面<FORM>內容時所提供的全部值,或在浏覽器地址欄輸入在URL後的值,通過Form和QueryString集合為ASP腳本所用。這是在ASP代碼中訪問值的一種簡單方法。

  1、 訪問ASP集合的一般技術

  大多數ASP集合與在VB中見到的普通集合相差不多。實際上,它們是值的數組,但能通過使用一個文本字符串鍵(對大小不敏感)以及一個整型索引進行訪問。因此,假如客戶端Web頁面包含的<FORM>如下:

<FORM ACTION=”show_request.asp” METHOD=”POST”>
FirstName:<INPUT TYPE=”TEXT” NAME=”FirstName”>
LastName:<INPUT TYPE=”TEXT” NAME=”LastName”>
<INPUT TYPE=”SUBMIT” VALUE=”Send”>
</FORM>
  可通過訪問ASP的Form集合來訪問其控件內的值:

strFirstName = Request.Form(“FirstName”)
strLastName = Request.Form(“LastName”)
  也可使用窗體中控件的整型索引,索引的范圍從在HTML中第一個定義的控件開始,然後根據定義的順序排序:

strFirstName = Request.Form(1)
strLastName = Request.Form(2)
  然而,後面的這種以整型為索引的技術不推薦使用,因為一旦有HTML中的控件發生了變化,或者插入一個新的控件,則ASP代碼將得到錯誤的值。進一步而言,對於閱讀代碼的人來講,極容易混淆。

  1) 訪問集合的全部值

  可以通過引用集合把整個Form上的一系列值變成單個的字符變量,且不用提供鍵或索引。

StrAllFormContent = Request.Form
  假如文本框包含值Priscilla和Descartes,則Request.Form語句將返回下列字符:

FirstName=Priscilla&LastName=Descartes
  注意,提供的值是以名稱/值對的形式出現的(即控件名稱=控件值),並且每一對名稱/值相互之間是用符號“&”相分隔的。假如打算把窗體中的內容傳遞單獨的,希望得到值的標准格式的可執行應用程序或DLL,這個技術是很有用的。然而,一般說來,都是通過以窗體中控件的名稱為文本鍵來訪問集合中的內容。

  2) 遍歷一個ASP集合

  有兩種方式遍歷一個ASP集合中的所有成員,方式與普通VB集合的基本相同。每個集合提供一個Count屬性,返回的是集合中條目數量。可通過使用一個整型索引使用Count屬性來遍歷。

For intLoop=1 To Request.Form.Count
Response.Write Request.Form(intLoop) & “<BR>”
Next
  假如先前的窗體包含Priscilla和Descartes值的兩個文本框,將得到如下結果:

Priscilla
Descartes
  然而,更好的方法是使用For Each...Next結構。

For Each objItem In Request.Form
Response.Write objItem & “=” & Request.Form(objItem) & “<BR>”
Next
  這帶來的好處是既可以訪問控件的名稱又可訪問其值。上述代碼將得到如下結果:

FirstName = Priscilla
LastName = Descartes
  注意,一些浏覽器返回到ASP的<FORM>值可能與頁面上顯示的順序不盡相同。

  3) 集合成員的多值性

  在某些情況下,ASP集合中的各個成員可能不止一個值,這種情況發生在HTML定義中有幾個控件有相同Name屬性時。例如:

<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集合中,將為“OtherHobby”創建一個條目。然而,它將包括從三個文本框中得到的值。假如在提交時,用戶留下了一個或多個為空,則返回的值為空字符串。假如用戶在第一和第三個文本框分別輸入Gardening和Mountaineering,第二個文本框為空,在我們的ASP代碼中訪問Request.Form(“OtherHobby”),將返回字符串:

Gardening, ,Mountaineering

  為了能夠在這種情況下,訪問單個值,可以用復雜一些的代碼:

For Each objItem In Request.Form
 If Request.Form(objItem).Count >1 Then ‘More than one value in this item Response.Write objItem & “:<BR>”
  For intLoop = 1 To Request.Form(objItem).Count
   Response.Write “Subkey” & intLoop & “value = “& Request.Form(objItem) (intLoop) & “<BR>”
  Next
 Else
  Response.Write objItem & “ = ” & Request.Form(objItem) & “<BR>”
 End If
Next
  對於前面的包含三個OtherHobby控件的窗體實例,這將返回:

OtherHobby:
Subkey 1 value = Gardening
Subkey 2 value =
Subkey 3 value = Mountaineering
  然而,由於很少給多個文本框相同的名字,因此這種技術很少用到。

  a) HTML中的單選或選頁按鈕控件

  在HTML中,需要給幾個控件相同的Name屬性的情況是單選(或選項)按鈕,例如:

<FORM ACTION=”show_request.asp” METHOD=”POST”>
I live in:
<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”>
</FORM>
  因為用戶只能選擇多項中的一個(這就是給它們相同的名字的原因),將僅得到一個返回值,浏覽器只能發送所選擇控件的值。因此,假如這個窗體的用戶已經選擇了“Europez”,將得到這個條目,通過遍歷Form集得到其值:

Country = EU

  由於為每個控件提供了不同的VALUE屬性,反映了每個條目所對應的國家或地區的名稱。假如省略了VALUE屬性,浏覽器將返回的值為“on”,因此將得到:

Country = on

  這是不經常用到的,因此一般對使用相同名稱的單選控件使用VALUE屬性。

  b) HTML復選框控件

  當一個窗體中HTML源碼包含一個復選框控件時,一般都給定唯一的名稱,例如:

<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=”Sleeping”> Sleeping
<INPUT TYPE=”SUBMIT” VALUE=”Send”>
</FORM>
  在這種情況下,提交窗體時,假如僅是第一和第三個復選框被選中(加標記),遍歷Form集合時,會得到下列值:

Reading = on
Sleeping = on
  然而,假如為每個復選框提供一個值,把這個值發往服務器代替字符串“on”。例如窗體如下:

<FORM ACTION=”show

copyright © 萬盛學電腦網 all rights reserved