ค่าทั้งหมดที่ให้ไว้เมื่อผู้ใช้กรอกเนื้อหาในหน้า <FORM> หรือป้อนค่าหลัง URL ในแถบที่อยู่ของเบราว์เซอร์ สคริปต์ ASP จะใช้ผ่านคอลเลกชันแบบฟอร์มและ QueryString นี่เป็นวิธีง่ายๆ ในการเข้าถึงค่าในโค้ด ASP
1. เทคนิคทั่วไปในการเข้าถึงคอลเลกชัน ASP
ส่วนใหญ่คล้ายกับคอลเลกชันทั่วไปที่เห็นใน VB จริงๆ แล้ว ค่าเหล่านี้เป็นอาร์เรย์ของค่า แต่เข้าถึงได้โดยใช้คีย์สตริงข้อความ (ซึ่งไม่คำนึงถึงขนาด) และดัชนีจำนวนเต็ม ดังนั้น หากเว็บเพจไคลเอ็นต์ประกอบด้วย <FORM> ดังนี้:
<FORM ACTION="show_request.asp" METHOD="POST">
ชื่อ:<INPUT TYPE=”TEXT” NAME=”FirstName”>
นามสกุล:<ประเภทอินพุต=”ข้อความ” NAME=”นามสกุล”>
<ประเภทอินพุต=”ส่ง” VALUE=”ส่ง”>
</FORM>
คุณสามารถเข้าถึงค่าในการควบคุมได้โดยการเข้าถึง Form collection ของ ASP:
strFirstName = Request.Form("FirstName")
strLastName = Request.Form("LastName")
ยังสามารถใช้ดัชนีจำนวนเต็มของตัวควบคุมในแบบฟอร์มได้ ช่วงของดัชนีเริ่มต้นจากตัวควบคุมแรกที่กำหนดใน HTML จากนั้นเรียงลำดับตามลำดับของคำจำกัดความ:
strFirstName = แบบฟอร์มคำขอ( 1)
strLastName = Request.Form(2)
อย่างไรก็ตาม ไม่แนะนำให้ใช้เทคนิคหลังของการใช้การจัดทำดัชนีจำนวนเต็ม เนื่องจากเมื่อตัวควบคุมใน HTML เปลี่ยนแปลง หรือแทรกตัวควบคุมใหม่ รหัส ASP จะได้รับค่าที่ไม่ถูกต้อง นอกจากนี้ ผู้ที่อ่านโค้ดยังสร้างความสับสนอย่างมากอีกด้วย
1) ในการเข้าถึงค่าทั้งหมดของคอลเลกชัน
คุณสามารถเปลี่ยนชุดของค่าในแบบฟอร์มทั้งหมดให้เป็นตัวแปรอักขระตัวเดียวโดยการอ้างอิงคอลเลกชันโดยไม่ต้องระบุคีย์หรือดัชนี
StrAllFormContent = Request.Form
หากกล่องข้อความมีค่า Priscilla และ Descartes คำสั่ง Request.Form จะส่งกลับอักขระต่อไปนี้:
FirstName=Priscilla&LastName=Descartes
โปรดทราบว่าค่าที่ให้มาจะปรากฏในรูปแบบของคู่ชื่อ/ค่า (เช่น ชื่อตัวควบคุม = ค่าควบคุม) และคู่ชื่อ/ค่าแต่ละคู่จะถูกแยกออกจากกันด้วยสัญลักษณ์ "&" เทคนิคนี้มีประโยชน์หากคุณวางแผนที่จะส่งเนื้อหาของแบบฟอร์มไปยังแอปพลิเคชันปฏิบัติการแยกต่างหากหรือ DLL ที่คาดว่าค่าจะอยู่ในรูปแบบมาตรฐาน โดยทั่วไปแล้ว อย่างไรก็ตาม เนื้อหาของคอลเลกชันจะเข้าถึงได้โดยใช้ชื่อของตัวควบคุมบนฟอร์มเป็นคีย์ข้อความ
2) การสำรวจคอลเลกชัน ASP
มีสองวิธีในการสำรวจสมาชิกทั้งหมดในคอลเลกชัน ASP โดยพื้นฐานแล้วจะเหมือนกับคอลเลกชัน VB ทั่วไป แต่ละคอลเลกชันมีคุณสมบัติ Count ซึ่งจะส่งคืนจำนวนรายการในคอลเลกชัน สามารถสำรวจได้โดยใช้คุณสมบัติ Count โดยใช้ดัชนีจำนวนเต็ม
สำหรับ intLoop=1 ถึง Request.Form.Count
การตอบกลับเขียนคำขอแบบฟอร์ม (intLoop) & “<BR>”
ต่อไปถ้า
ฟอร์มก่อนหน้านี้มีสองกล่องข้อความที่มีค่า Priscilla และ Descartes คุณจะได้ผลลัพธ์ดังต่อไปนี้:
Priscilla
Descartes
อย่างไรก็ตาม วิธีการที่ดีกว่าคือการใช้โครงสร้าง For Each...Next
สำหรับแต่ละรายการ objItem ใน Request.Form
Response.Write objItem & “=" & Request.Form(objItem) & “<BR>”
ถัดไป
ประโยชน์ของสิ่งนี้คือคุณสามารถเข้าถึงทั้งชื่อและค่าของตัวควบคุม โค้ดด้านบนจะส่งผลให้มีดังต่อไปนี้:
FirstName = Priscilla
LastName = Descartes
โปรดทราบว่าค่า <FORM> ที่เบราว์เซอร์บางตัวส่งคืนไปยัง ASP อาจไม่เหมือนกับลำดับที่แสดงบนเพจ
3) ลักษณะหลายค่าของสมาชิกคอลเลกชัน
ในบางกรณี สมาชิกแต่ละคนในคอลเลกชัน ASP อาจมีมากกว่าหนึ่งค่า ซึ่งเกิดขึ้นเมื่อมีตัวควบคุมหลายอย่างในข้อกำหนด HTML ที่มีแอตทริบิวต์ชื่อเดียวกัน ตัวอย่างเช่น:
<FORM ACTION=”Show_request.asp” METHOD=”POST”>
<ประเภทอินพุต=”ข้อความ” NAME=”งานอดิเรกอื่นๆ”>
<ประเภทอินพุต=”ข้อความ” NAME=”งานอดิเรกอื่นๆ”>
<ประเภทอินพุต=”ข้อความ” NAME=”งานอดิเรกอื่นๆ”>
<ประเภทอินพุต=”ส่ง” VALUE=”ส่ง”>
</FORM>
ในการรวบรวมแบบฟอร์ม รายการจะถูกสร้างขึ้นสำหรับ "OtherHobby" แต่จะรวมค่าจากกล่องข้อความทั้ง 3 กล่องด้วย หากผู้ใช้เว้นว่างอย่างน้อย 1 ช่องเมื่อส่ง ค่าที่ส่งคืนจะเป็นสตริงว่าง หากผู้ใช้เข้าสู่ Gardening and Mountaineering ในกล่องข้อความที่หนึ่งและสามตามลำดับ และกล่องข้อความที่สองว่างเปล่า การเข้าถึง Request.Form("OtherHobby") ในโค้ด ASP ของเราจะส่งคืนสตริง:
Gardening, ,Mountaineering
To be can เข้าถึงค่าเดียวในกรณีนี้ คุณสามารถใช้โค้ดที่ซับซ้อนกว่านี้ได้:
For Each objItem In Request.Form
ถ้า Request.Form(objItem).Count >1 แล้ว 'มีมากกว่าหนึ่งค่าในรายการนี้ Response.Write objItem & “:<BR><”
สำหรับ intLoop = 1 ถึง Request.Form(objItem).Count
การตอบสนองเขียน "คีย์ย่อย" & intLoop & "value = "& Request.Form (objItem) (intLoop) & "<BR>"
ต่อไป
อื่น
การตอบสนองเขียน objItem & “ = ” & คำขอแบบฟอร์ม (objItem) & “<BR>”
สิ้นสุดถ้า
ถัดไปสำหรับ
อินสแตนซ์แบบฟอร์มก่อนหน้าที่มีตัวควบคุม OtherHobby สามตัว สิ่งนี้จะส่งกลับ:
OtherHobby:
ค่าคีย์ย่อย 1 = การทำสวน
ค่าคีย์ย่อย 2 =
ค่าคีย์ย่อย 3 = การปีนเขา
อย่างไรก็ตาม เนื่องจากเป็นเรื่องยากที่จะให้กล่องข้อความหลายกล่องมีชื่อเดียวกัน จึงไม่ค่อยมีการใช้เทคนิคนี้
ก) การควบคุมปุ่มเรดิโอหรือเพจใน HTML
ใน HTML สถานการณ์ที่การควบคุมหลายตัวจำเป็นต้องได้รับแอตทริบิวต์ชื่อเดียวกันคือปุ่มเรดิโอ (หรือตัวเลือก) ตัวอย่างเช่น:
<FORM ACTION="show_request.asp" METHOD=" POST ”>
ฉันอาศัยอยู่ใน:
<ประเภทอินพุต=”วิทยุ” NAME=”ประเทศ” VALUE=”AM”>อเมริกา<BR>
<ประเภทอินพุต=”วิทยุ” NAME=”ประเทศ” VALUE=”EU”>ยุโรป<BR>
<ประเภทอินพุต=”วิทยุ” NAME=”ประเทศ” VALUE=”AS”>เอเชีย<BR>
<ประเภทอินพุต=”ส่ง” VALUE=”ส่ง”>
</FORM>
เนื่องจากผู้ใช้สามารถเลือกได้เพียงรายการเดียวจากหลายรายการ (ซึ่งเป็นเหตุผลว่าทำไมพวกเขาจึงได้รับชื่อเดียวกัน) จะได้รับค่าส่งคืนเพียงค่าเดียวเท่านั้น และเบราว์เซอร์สามารถส่งเฉพาะค่าของตัวควบคุมที่เลือกเท่านั้น ดังนั้น หากผู้ใช้แบบฟอร์มนี้เลือก "Europez" รายการนี้จะได้รับ และจะได้รับค่าโดยการสำรวจชุดแบบฟอร์ม:
Country = EU
เนื่องจากมีการระบุแอตทริบิวต์ VALUE ที่แตกต่างกันสำหรับการควบคุมแต่ละรายการ จึงสะท้อนถึงค่า สอดคล้องกับแต่ละรายการชื่อประเทศหรือภูมิภาค หากละเว้นแอตทริบิวต์ VALUE เบราว์เซอร์จะส่งคืนค่า "on" ดังนั้นคุณจะได้รับ:
Country = on
ซึ่งไม่ได้ใช้บ่อยนัก ดังนั้นโดยทั่วไปแอตทริบิวต์ VALUE จะใช้สำหรับการควบคุมวิทยุที่มีชื่อเดียวกัน
b) การควบคุมกล่องกาเครื่องหมาย HTML
เมื่อซอร์สโค้ด HTML ในแบบฟอร์มมีการควบคุมกล่องกาเครื่องหมาย โดยทั่วไปแล้วจะได้รับชื่อที่ไม่ซ้ำ ตัวอย่างเช่น:
<FORM ACTION="show_request.asp" METHOD="POST">
ฉันสนุกกับ:
<INPUT TYPE=”ช่องทำเครื่องหมาย” NAME=”กำลังอ่าน” ที่ถูกตรวจสอบแล้ว> การอ่าน
<INPUT TYPE=”ช่องทำเครื่องหมาย” NAME=”การรับประทานอาหาร”>การรับประทานอาหาร
<INPUT TYPE=”ช่องทำเครื่องหมาย” NAME=”กำลังนอนหลับ”> กำลังนอนหลับ
<ประเภทอินพุต=”ส่ง” VALUE=”ส่ง”>
</FORM>
ในกรณีนี้เมื่อส่งแบบฟอร์มหากเลือกเฉพาะช่องทำเครื่องหมายที่หนึ่งและสาม (ทำเครื่องหมาย) เมื่อสำรวจคอลเลกชันแบบฟอร์มจะได้รับค่าต่อไปนี้:
Reading = on
Sleeping = on
อย่างไรก็ตาม หากคุณระบุค่าสำหรับแต่ละช่องทำเครื่องหมาย ค่านี้จะถูกส่งไปยังเซิร์ฟเวอร์แทนสตริง "on" ตัวอย่างเช่น แบบฟอร์มจะเป็นดังนี้:
<FORM ACTION="show_request.asp" METHOD="POST">
ฉันสนุกกับ:
<INPUT TYPE=”ช่องทำเครื่องหมาย” VALUE=”Hobby025” NAME=”งานอดิเรก” ถูกตรวจสอบแล้ว>_
การว่ายน้ำ
<INPUT TYPE=”ช่องทำเครื่องหมาย” VALUE=”Hobby003” NAME=”งานอดิเรก” ถูกตรวจสอบแล้ว>_
การอ่าน
<INPUT TYPE=”ช่องทำเครื่องหมาย” VALUE=”Hobby068” NAME=”งานอดิเรก”>การกิน
<INPUT TYPE=”ช่องทำเครื่องหมาย” VALUE=”Hobby010” NAME=”งานอดิเรก”>นอนหลับ
<ประเภทอินพุต=”ส่ง” VALUE=”ส่ง”>
</FORM>
หากมีการส่งทั้งหมดยกเว้นช่องทำเครื่องหมายที่สาม คอลเลกชัน Request.Form จะให้ผลลัพธ์ดังต่อไปนี้:
Hobby = Hobby025, Hobby003, Hobby010
หากคุณเขียนโค้ดการข้ามผ่านคอลเลกชันที่ซับซ้อนมากขึ้น ตามที่กล่าวไว้ก่อนหน้านี้ (แสดงแยกแต่ละคีย์ย่อย) คุณจะได้รับผลลัพธ์:
งานอดิเรก:
ค่าคีย์ย่อย 1 = Hobby025
ค่าคีย์ย่อย 2 = Hobby003
ค่าคีย์ย่อย 3 = Hobby010
ควรสังเกตว่าในสองกรณี ตัวควบคุมที่ไม่ได้เลือกจะไม่ส่งกลับค่าใดๆ เลย ในผลลัพธ์ของกรณีแรก ไม่มีลูกน้ำหลอกลวง และไม่มีค่าว่างในกรณีที่สอง สิ่งนี้แตกต่างจากผลลัพธ์ของการทดสอบที่เทียบเท่าโดยใช้กล่องข้อความที่อธิบายไว้ข้างต้น เมื่อใช้กล่องข้อความ กล่องข้อความแต่ละกล่องจะส่งกลับค่า แม้แต่สตริงว่าง สาเหตุนี้เกิดจากเบราว์เซอร์ ดังนั้น คุณควรใส่ใจกับปัญหานี้เมื่อเข้าถึงคอลเลกชันในโค้ด ASP
ผลข้างเคียงที่ยุ่งยากของสถานการณ์ข้างต้นคือ เมื่อใช้ช่องทำเครื่องหมาย ดัชนีของค่าช่องทำเครื่องหมายไม่มีความสัมพันธ์กับตำแหน่งของตัวควบคุมใน HTML ต้นฉบับ ในตัวอย่างข้างต้น ช่องทำเครื่องหมายที่สี่มีหมายเลขคีย์ย่อยเป็น 3 เนื่องจากเมื่อมีการส่งแบบฟอร์ม ตัวควบคุมที่สองจะไม่ถูกเลือก
c) การควบคุมรายการ HTML
แท็ก <SELECT> ใน HTML ใช้เพื่อสร้างกล่องรายการแบบเลื่อนลงมาตรฐานซึ่งค่าจะแสดงในรูปแบบไฮบริดที่น่าสนใจ แบบฟอร์มต่อไปนี้สร้างขึ้นโดยมี 5 ค่าเพื่อให้ผู้ใช้เลือก เนื่องจากมีแอตทริบิวต์ MULTIPLE จึงสามารถเลือกได้มากกว่าหนึ่งรายการโดยกดปุ่ม Shift หรือ Ctrl ค้างไว้ขณะเลือก
<แบบฟอร์มการกระทำ=”show_request.asp” วิธี=”โพสต์”>
<SELECT NAME=”งานอดิเรก” SIZE=”5” หลายรายการ>
<OPTION VALUE=”Hobby001”>การเขียนโปรแกรม</OPTION>
<OPTION VALUE=”Hobby025”>ว่ายน้ำ</OPTION>
<OPTION VALUE=”Hobby003”>การอ่าน</OPTION>
<OPTION VALUE=”Hobby068”>การรับประทานอาหาร</OPTION>
<OPTION VALUE=”Hobby010”>นอนหลับ</OPTION>
</เลือก><<P>
<ประเภทอินพุต=”ส่ง” VALUE=”ส่ง”>
</FORM>
นี้ส่งคืนรายการเดียวในการรวบรวมแบบฟอร์มซึ่งประกอบด้วยค่าที่เลือก (แอตทริบิวต์ VALUE ที่ระบุในแท็ก <OPTION> เดียว) คั่นด้วยเครื่องหมายจุลภาค:
Hobby = Hobby025, Hobby003, Hobby010
ถ้า การใช้ชุดรหัสการสำรวจเส้นทางที่ซับซ้อนกว่าเล็กน้อย (แสดงแต่ละคีย์ย่อยแยกกัน) เราจะได้รับ:
งานอดิเรก:
ค่าคีย์ย่อย 1 = Hobby025
ค่าคีย์ย่อย 2 = Hobby003
ค่าคีย์ย่อย 3 = Hobby010
นี่เป็นสถานการณ์เดียวกันกับด้านบนสำหรับช่องทำเครื่องหมายที่มีชื่อเดียวกัน ในความเป็นจริง รายการ SELECT ถือเป็นรายการกล่องกาเครื่องหมายสำหรับการเลือก (ไม่ตรวจสอบ) รายการที่เกี่ยวข้อง
อย่างไรก็ตาม กล่องรายการยังมีค่าที่ระบุ หากคุณตั้งค่าแอตทริบิวต์ VALUE ในแท็ก <OPTION> คุณจะได้รับเนื้อหาข้อความของตัวเลือกที่เลือก ชุด Request.Form จะมีรายการดังกล่าว:
Hobby = Swimming, การอ่าน การนอนหลับ
และในทำนองเดียวกัน โค้ดการวนซ้ำคอลเลกชันที่ซับซ้อนมากขึ้นจะส่งกลับผลลัพธ์ดังนี้
:
ค่าคีย์ย่อย 1 = การว่ายน้ำ
ค่าคีย์ย่อย 2 = การอ่าน
ค่าคีย์ย่อย 3 = Sleeping
แน่นอนว่าหากเลือกรายการเดียวและมีการระบุแอตทริบิวต์ VALUE ใน <OPTION> ผลลัพธ์จะมีเฉพาะ:
Hobby = Hobby025
หากไม่ได้ระบุแอตทริบิวต์ VALUE ผลลัพธ์จะเป็น:
Hobby = การว่ายน้ำ
ซึ่งจะทำให้หายไปได้ (นั่นคือ ไม่มีค่า) จะแสดงข้อความตัวเลือกและยังสามารถทำการเปลี่ยนแปลงที่เกี่ยวข้องได้อีกด้วย กรณีหลังมีประโยชน์อย่างมากในบางสถานการณ์ เช่น เมื่อคุณต้องการแสดง (สตริงคำอธิบาย) และส่งผ่านเนื้อหาที่แตกต่างไปจากเดิมอย่างสิ้นเชิง (เช่น การใช้โค้ดสั้นเพื่อแสดงสตริงอธิบาย)
ง)
กล่องกาเครื่องหมายการส่ง HTML และการควบคุมรูปภาพและปุ่มตัวเลือกเป็นตัวอย่างของการควบคุมแบบบูลีนที่ส่งคืน "เปิด" เมื่อเลือกหรือเลือก เบราว์เซอร์ไม่รวมค่าของการควบคุมที่ไม่ได้เลือกหรือเลือกไว้ ซึ่งต่างจากกล่องข้อความและการควบคุม HTML อื่นๆ ไม่ได้เลือก
มีตัวควบคุมบูลีนอีกตัวหนึ่งที่ใช้กันทั่วไปเรียกว่าปุ่ม HTML เช่น <INPUT TYPE="SUBMIT">, <INPUT TYPE="RESET">, <INPUT TYPE="IMAGE">, <INPUT TYPE="BUTTON"> และ <BUTTON>...</BUTTON>
ตัวควบคุมชนิด BUTTON จะไม่ส่งคืนค่าใดๆ เนื่องจากไม่มีผลกระทบโดยตรงต่อแบบฟอร์ม แม้ว่าคุณจะใช้วิธีการส่งที่ใช้ในการเรียกแบบฟอร์ม เบราว์เซอร์จะไม่รวมค่าของตัวควบคุมชนิด BUTTON ในคำขอใดๆ ในทำนองเดียวกัน ค่าของปุ่ม <INPUT TYPE="RESET"> จะไม่ถูกส่งไปยังเซิร์ฟเวอร์
อย่างไรก็ตาม การควบคุมปุ่มอินพุตประเภท SUBMIT และ IMAGE จะส่งแบบฟอร์มไปยังเซิร์ฟเวอร์จริง ๆ และคุณสมบัติ VALUE ของพวกเขามีค่าของการควบคุมอื่น ๆ ของแบบฟอร์ม (ตราบใดที่แอตทริบิวต์ NAME รวมอยู่ในคำจำกัดความ HTML) ตัวอย่างเช่น แบบฟอร์มนี้อาจเป็นส่วนหนึ่งของเว็บแอปพลิเคชันประเภทวิซาร์ดที่อนุญาตให้ผู้ใช้ดำเนินการหรือยกเลิกกระบวนการ:
<FORM ACTION="show_request.asp" METHOD="POST">
<ประเภทอินพุต=”ส่ง” NAME=”btnส่ง” VALUE=”ถัดไป”>
<ประเภทอินพุต=”ส่ง” NAME=”btnส่ง” VALUE=”ก่อนหน้า”>
<ประเภทอินพุต=”ส่ง” NAME=”btnส่ง” VALUE=”ยกเลิก”>
</FORM>
ในแบบฟอร์ม คุณสามารถใส่ปุ่มส่งได้หลายปุ่ม ในกรณีนี้ แต่ละปุ่มควรได้รับแอตทริบิวต์ VALUE ที่ไม่ซ้ำกันดังที่แสดงไว้ด้านบน เมื่อส่งแบบฟอร์มแล้วให้ข้ามผ่านค่าของ Request.Form collection จะสร้างค่าที่ขึ้นอยู่กับปุ่มที่กดเพื่อส่งแบบฟอร์ม หากผู้ใช้กดปุ่ม "ก่อนหน้า" เขาจะได้รับ:
btnSubmit = ก่อนหน้า
ดังนั้น คอลเลกชัน Request.Form จึงสามารถสอบถามเพื่อกำหนดเพจที่แสดงถัดไปได้ เช่น:
Select Case Request.Form("btnSubmit")
กรณี "ต่อไป"
Response.Redirect "page_3.asp"
กรณี "ก่อนหน้า"
Response.Redirect "page_1.asp"
กรณี "ยกเลิก"
Response.Redirect "main_menu.asp"
สิ้นสุดการเลือก
ในเวลาเดียวกัน คุณยังสามารถใช้แอตทริบิวต์ NAME ที่แตกต่างกันสำหรับแต่ละปุ่มได้ตามต้องการ และเลือกชื่อตัวควบคุมที่มีค่าอยู่ในคอลเลกชันแบบฟอร์ม มีประโยชน์อย่างมากในสถานการณ์ที่ตัวควบคุมไม่มีมาร์กอัปที่สมบูรณ์แต่กลับตามด้วยป้ายข้อความที่ยาวกว่า ดังที่แสดงในรูปภาพด้านล่าง
อินเทอร์เฟซบนหน้าจอนี้สร้างขึ้นโดยรหัสต่อไปนี้:
<FORM ACTION="show_request.asp" METHOD="POST">
<B>คุณอยากทำอะไรตอนนี้?</B><P>
<INPUT TYPE=”ส่ง” NAME=”btnNext” VALUE= ”>ไปที่หน้าถัดไป<P>
<INPUT TYPE=”ส่ง” NAME=”btnPrevious” Value=” ”> กลับไปที่หน้าก่อนหน้า<P>
<INPUT TYPE=”SUBMIT” NAME=”btnCancel” VALUE=” ”>ยกเลิกและกลับไปที่หน้าเมนูหลัก<P>
</FORM>
ในหน้า ASP หลังจากได้รับข้อมูลแล้ว คุณสามารถตรวจสอบค่าที่ระบุโดยชื่อปุ่มเพื่อดูว่าปุ่มใดที่ถูกกด
ถ้า Len(Request.Form("btnNext")) จากนั้น Response.Redirect "page_3.asp"
ถ้า Len(Request.Form("btnPrevious")) จากนั้น Response.Redirect "page_1.asp"
ถ้า Len(Request.Form("btnCancel")) จากนั้น Response.Redirect "main_menu.asp"
งานนี้คือสอบถามคอลเลกชัน ASP บนคีย์และส่งกลับสตริงว่างหากไม่มีอยู่ กล่าวอีกนัยหนึ่ง หากกดปุ่มที่สอง (หน้าก่อนหน้า) ค่าของ Request.Form("btnNext") จะเป็นสตริงว่าง และความยาวของมันจะเป็นศูนย์โดยไม่สร้างข้อผิดพลาด เมื่อกดปุ่มที่สอง ค่าของรายการนี้ในการรวบรวมแบบฟอร์ม Request.Form("btnPrevious") จะเป็น " " และความยาวของมันมากกว่าศูนย์
จ) ปรับปรุงประสิทธิภาพของการใช้คอลเลกชันคำขอ การ
เข้าถึงคอลเลกชัน ASP เพื่อดาวน์โหลดค่าเป็นกระบวนการที่ใช้เวลานานและต้องใช้คอมพิวเตอร์มาก เนื่องจากการดำเนินการเกี่ยวข้องกับชุดการค้นหาของคอลเลกชันที่เกี่ยวข้อง ซึ่งช้ากว่าการเข้าถึงตัวแปรในเครื่องมาก ดังนั้น หากคุณวางแผนที่จะใช้ค่าในคอลเลกชันหลายครั้งบนเพจ คุณควรพิจารณาจัดเก็บค่านั้นเป็นตัวแปรภายในเครื่อง ตัวอย่างเช่น:
strTitle = Request.Form("Title")
strFirstName = Request.Form("FirstName")
strLastName = Request.Form("นามสกุล")
ถ้า Len(stTitle) ดังนั้น strTitle = strTitle & “ “
ถ้า strFirstName = " " จากนั้น
StrFullName = strTitle & " " & strLastName
ElseIf Len(strFirstName) = 1 จากนั้น
StrFullName = strTitle & strFirstName & “· “ & strLastName
อื่น
StrFullName = strTitle & strFirstName & " " & strLastName
สิ้นสุดหาก
f) ค้นหาคอลเลกชันคำขอทั้งหมด
ในบางกรณี เป็นไปได้ที่จะทราบว่าชื่อคีย์ของค่าจะปรากฏในคอลเลกชันคำขอ แต่ไม่แน่ชัดว่าเป็นคอลเลกชันใด ตัวอย่างเช่น ถ้าหลายเพจ (หรือส่วนต่างๆ ของเพจ) ส่งค่าไปยังสคริปต์ ASP เดียวกัน ค่านั้นอาจปรากฏในคอลเลกชัน Form หรือ QueryString
หากต้องการดูว่าเหตุใดค่าจึงอาจปรากฏในคอลเลกชันที่แตกต่างกัน ให้พิจารณาสถานการณ์นี้: มีการร้องขอเพจโดยใช้องค์ประกอบไฮเปอร์ลิงก์ <A> ในกรณีนี้ วิธีเดียวที่จะเพิ่มค่าให้กับคำขอคือการเพิ่มลงใน URL อย่างไรก็ตาม ค่าเดียวกันอาจปรากฏใน <FORM> ในหน้าอื่นแล้ว หรือในส่วนอื่นของหน้าเดียวกัน:
...
<แบบฟอร์มการกระทำ=”process_page.asp” วิธีการ=”โพสต์”>
<ประเภทอินพุต=”ส่ง” NAME=”หน้า” VALUE=”ถัดไป”>
<ประเภทอินพุต=”ส่ง” NAME=”หน้า” VALUE=”ก่อนหน้า”>
<ประเภทอินพุต=”ส่ง” NAME=”หน้า” VALUE=”ช่วยเหลือ”>
</แบบฟอร์ม><
-
-
หากต้องการความช่วยเหลือ โปรดไปที่ <A HREF=”process_page.asp?page=Help”>หน้าช่วยเหลือ</A>
...
ในกรณีนี้ การกดปุ่มวิธีใช้บนแบบฟอร์มจะส่งคู่ชื่อ/ค่า "page=Help" จากคอลเลกชัน Request.Form อย่างไรก็ตาม การกดไฮเปอร์ลิงก์ <A> อาจส่งชื่อ/ค่า "Page=Help" ด้วย แต่คราวนี้อยู่ในคอลเลกชัน QueryString ในการเข้าถึงค่านี้ ให้ใช้คุณสมบัติพิเศษของออบเจ็กต์ ASP Request:
strPage = Request("page")
สิ่งนี้จะค้นหาคอลเลกชันทั้งหมด - QueryString, Form, Cookies, ClientCertificate, ServerVariables - ตามลำดับ จนกว่าจะพบชื่อของค่าแรกที่ตรงกัน การทำเช่นนี้มีประสิทธิภาพน้อยกว่าการเข้าถึงคอลเลกชันที่เหมาะสมโดยตรง และไม่ปลอดภัย เว้นแต่จะมีการรับประกันโดยสมบูรณ์ว่าค่าจะไม่ปรากฏในคอลเลกชันอื่น
ตัวอย่างเช่น คุณอาจต้องการรวบรวมชื่อของเว็บเซิร์ฟเวอร์ที่ตอบสนองคำขอของลูกค้าโดยการค้นหา "SERVER_NAME" ในคอลเลกชัน Request.ServerVariables ที่ปรากฏในทุกๆ แบบสอบถาม อย่างไรก็ตาม หากคอลเลกชันอื่นใดมีค่าชื่อ "server_name" ด้วย (โปรดจำไว้ว่าชื่อคีย์ไม่คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่) คุณจะได้รับผลลัพธ์ที่ไม่ถูกต้องเมื่อใช้ Request("server_name") การใช้ไวยากรณ์ Reqeust.ServerVariables("server_name") เราจะประสบปัญหาในการติดตามข้อผิดพลาด
โดยสรุป ให้ใช้เทคนิค "ค้นหาคอลเลกชันทั้งหมด" ด้วยความระมัดระวังเป็นอย่างยิ่ง และเฉพาะเมื่อไม่มีเทคนิคอื่นใดที่จะให้ผลลัพธ์ที่คุณต้องการเท่านั้น
g) เข้าถึงคอลเลกชันอื่นๆ
ในส่วนนี้ของบทความนี้ เราได้เน้นไปที่คอลเลกชันแบบฟอร์ม ซึ่งน่าจะเป็นคอลเลกชันที่ใช้มากที่สุด อย่างไรก็ตาม เทคนิคทั้งหมดนี้ใช้ได้กับวัตถุอื่นๆ อย่างเท่าเทียมกัน รวมถึงที่มาจากคอลเลกชั่น Request object (เช่น Form, QueryString, Cookies, ServerVariables และ ClientCertificate) และคุกกี้ (และคอลเลกชั่นที่มาจาก object อื่นๆ) ที่มาจาก Response object
เราจะดูคร่าวๆ เกี่ยวกับวิธีการป้อนค่าลงในคอลเลกชัน QueryString พร้อมด้วยข้อดีและข้อเสีย อย่างไรก็ตาม ชุดคุกกี้ทั้งสองชุดมีฟังก์ชันเพิ่มเติมที่ทำให้การใช้คุกกี้สะดวกยิ่งขึ้น ตามที่กล่าวไว้ด้านล่าง