Semua nilai yang diberikan saat pengguna mengisi konten halaman <FORM>, atau memasukkan nilai setelah URL di bilah alamat browser, digunakan oleh skrip ASP melalui koleksi Formulir dan QueryString. Ini adalah cara sederhana untuk mengakses nilai dalam kode ASP.
1. Teknik umum untuk mengakses koleksi ASP.
Kebanyakan koleksi ASP mirip dengan koleksi biasa yang terlihat di VB. Secara efektif, mereka adalah array nilai, tetapi diakses menggunakan kunci string teks (yang tidak peka terhadap ukuran) dan indeks bilangan bulat. Oleh karena itu, jika halaman Web klien berisi <FORM> sebagai berikut:
<FORM ACTION="show_request.asp" METHOD="POST">
Nama Depan:<INPUT TYPE=”TEKS” NAMA=”Nama Depan”>
Nama Belakang:<INPUT TYPE=”TEKS” NAMA=”Nama Belakang”>
<INPUT TYPE=”KIRIM” NILAI=”Kirim”>
</FORM>
Anda dapat mengakses nilai dalam kontrolnya dengan mengakses koleksi Formulir ASP:
strFirstName = Request.Form("FirstName")
strLastName = Request.Form("LastName")
juga dapat menggunakan indeks bilangan bulat dari kontrol dalam formulir. Rentang indeks dimulai dari kontrol pertama yang ditentukan dalam HTML, dan kemudian diurutkan berdasarkan urutan definisi:
strFirstName = Permintaan.Formulir( 1)
strLastName = Request.Form(2)
Namun, teknik terakhir menggunakan pengindeksan bilangan bulat tidak disarankan, karena setelah kontrol dalam HTML berubah, atau kontrol baru dimasukkan, kode ASP akan mendapatkan nilai yang salah. Selain itu, ini sangat membingungkan orang yang membaca kodenya.
1) Untuk mengakses semua nilai koleksi,
Anda dapat mengubah serangkaian nilai di seluruh Formulir menjadi variabel karakter tunggal dengan mereferensikan koleksi tanpa memberikan kunci atau indeks.
StrAllFormContent = Request.Form
Jika kotak teks berisi nilai Priscilla dan Descartes, pernyataan Request.Form akan mengembalikan karakter berikut:
FirstName=Priscilla&LastName=Descartes
Perhatikan bahwa nilai yang diberikan muncul dalam bentuk pasangan nama/nilai (yaitu Nama Kontrol = Nilai kontrol), dan setiap pasangan nama/nilai dipisahkan satu sama lain dengan simbol "&". Teknik ini berguna jika Anda berencana meneruskan konten formulir ke aplikasi terpisah yang dapat dijalankan atau DLL yang mengharapkan nilainya dalam format standar. Namun secara umum, konten koleksi diakses dengan menggunakan nama kontrol pada formulir sebagai kunci teks.
2) Melintasi koleksi ASP
Ada dua cara untuk melintasi semua anggota dalam koleksi ASP Metode pada dasarnya sama dengan koleksi VB biasa. Setiap koleksi menyediakan properti Count, yang mengembalikan jumlah item dalam koleksi. Itu dapat dilintasi menggunakan properti Count menggunakan indeks integer.
Untuk intLoop=1 Untuk Meminta.Form.Count
Respon.Permintaan Tulis.Formulir(intLoop) & “<BR>”
BerikutnyaJika
form sebelumnya berisi dua kotak teks dengan nilai Priscilla dan Descartes, Anda akan mendapatkan hasil sebagai berikut:
Priscilla
Descartes
Namun, pendekatan yang lebih baik adalah dengan menggunakan struktur For Each...Next.
Untuk Setiap ObjItem Dalam Formulir Permintaan
Respons.Tulis objItem & “=" & Permintaan.Form(objItem) & “<BR>”
BerikutnyaManfaatnya
adalah Anda dapat mengakses nama dan nilai kontrol. Kode di atas akan menghasilkan sebagai berikut:
FirstName = Priscilla
LastName = Descartes
Perhatikan bahwa nilai <FORM> yang dikembalikan oleh beberapa browser ke ASP mungkin tidak sama dengan urutan yang ditampilkan pada halaman.
3) Sifat multi-nilai dari anggota koleksi
Dalam beberapa kasus, setiap anggota dalam koleksi ASP mungkin memiliki lebih dari satu nilai. Hal ini terjadi ketika ada beberapa kontrol dalam definisi HTML yang memiliki atribut Nama yang sama. Misalnya:
<FORM ACTION=”Show_request.asp” METHOD=”POST”>
<INPUT TYPE=”TEKS” NAMA=”Hobi Lainnya”>
<INPUT TYPE=”TEKS” NAMA=”Hobi Lainnya”>
<INPUT TYPE=”TEKS” NAMA=”Hobi Lainnya”>
<INPUT TYPE=”KIRIM” NILAI=”Kirim”>
</FORM>
Dalam kumpulan Formulir, sebuah entri akan dibuat untuk "OtherHobby". Namun, itu akan menyertakan nilai dari tiga kotak teks. Jika pengguna membiarkan satu atau beberapa bidang kosong saat mengirimkan, nilai yang dikembalikan adalah string kosong. Jika pengguna memasukkan Berkebun dan Mendaki Gunung di kotak teks pertama dan ketiga, dan kotak teks kedua kosong, mengakses Request.Form("OtherHobby") di kode ASP kami akan mengembalikan string:
Berkebun, ,Pendakian Gunung
Untuk dapat mengakses nilai tunggal dalam hal ini, Anda dapat menggunakan kode yang lebih kompleks:
Untuk Setiap objekItem Dalam Permintaan.Bentuk
Jika Request.Form(objItem).Count >1 Maka 'Lebih dari satu nilai dalam item ini Response.Write objItem & “:<BR>”
Untuk intLoop = 1 Ke Request.Form(objItem).Count
Respon.Tulis “Subkunci” & intLoop & “value = “& Request.Form(objItem) (intLoop) & “<BR>”
Berikutnya
Kalau tidak
Respon.Tulis objItem & “ = ” & Permintaan.Form(objItem) & “<BR>”
Akhiri Jika
BerikutnyaUntuk
contoh formulir sebelumnya yang berisi tiga kontrol OtherHobby, ini akan menghasilkan:
OtherHobby:
Nilai subkunci 1 = Berkebun
Nilai subkunci 2 =
Nilai subkunci 3 = Pendakian Gunung
Namun, karena jarang sekali memberi nama yang sama pada beberapa kotak teks, teknik ini jarang digunakan.
a) Kontrol tombol radio atau halaman dalam HTML
Dalam HTML, situasi di mana beberapa kontrol perlu diberi atribut Nama yang sama adalah tombol radio (atau opsi), misalnya:
<FORM ACTION="show_request.asp" METHOD=" POST ”>
Saya tinggal di:
<INPUT TYPE=”RADIO” NAME=”Negara” VALUE=”AM”>Amerika<BR>
<INPUT TYPE=”RADIO” NAME=”Negara” VALUE=”EU”>Eropa<BR>
<INPUT TYPE=”RADIO” NAME=”Negara” VALUE=”AS”>Asia<BR>
<INPUT TYPE=”KIRIM” NILAI=”Kirim”>
</FORM>
Karena pengguna hanya dapat memilih salah satu dari beberapa item (itulah sebabnya mereka diberi nama yang sama), hanya satu nilai kembalian yang akan diperoleh, dan browser hanya dapat mengirimkan nilai dari kontrol yang dipilih. Oleh karena itu, jika pengguna formulir ini telah memilih "Europez", entri ini akan diperoleh, dan nilainya akan diperoleh dengan menelusuri kumpulan Formulir:
Negara = UE
Karena atribut VALUE yang berbeda disediakan untuk setiap kontrol, maka atribut tersebut mencerminkan nilainya sesuai dengan setiap entri. Nama negara atau wilayah. Jika atribut VALUE dihilangkan, browser akan mengembalikan nilai "on", sehingga Anda akan mendapatkan:
Country = on
Ini jarang digunakan, sehingga atribut VALUE umumnya digunakan untuk kontrol radio dengan nama yang sama.
b) Kontrol kotak centang HTML
Ketika kode sumber HTML dalam formulir berisi kontrol kotak centang, biasanya diberi nama unik, misalnya:
<FORM ACTION="show_request.asp" METHOD="POST">
Saya menikmati:
<INPUT TYPE=”CHECKBOX” NAME=”Bacaan” DIPERIKSA> Bacaan
<INPUT TYPE=”CHECKBOX” NAMA=”Makan”>Makan
<INPUT TYPE=”CHECKBOX” NAME=”Tidur”> Tidur
<INPUT TYPE=”KIRIM” NILAI=”Kirim”>
</FORM>
Dalam hal ini, ketika mengirimkan formulir, jika hanya kotak centang pertama dan ketiga yang dipilih (ditandai), saat melintasi kumpulan Formulir, akan diperoleh nilai berikut:
Membaca = aktif
Sleeping = on
Namun, jika Anda memberikan nilai untuk setiap kotak centang, nilai ini dikirim ke server, bukan string "on". Misalnya formnya sebagai berikut:
<FORM ACTION="show_request.asp" METHOD="POST">
Saya menikmati:
<INPUT TYPE=”CHECKBOX” VALUE=”Hobby025” NAME=”Hobby” DIPERIKSA>_
Renang
<INPUT TYPE=”CHECKBOX” VALUE=”Hobby003” NAME=”Hobby” DIPERIKSA>_
Membaca
<INPUT TYPE=”CHECKBOX” VALUE=”Hobby068” NAME=”Hobby”>Makan
<INPUT TYPE=”CHECKBOX” VALUE=”Hobby010” NAME=”Hobby”>Tidur
<INPUT TYPE=”KIRIM” NILAI=”Kirim”>
</FORM>
Jika semua kecuali kotak centang ketiga dikirimkan, koleksi Request.Form akan memberikan hasil sebagai berikut:
Hobby = Hobby025, Hobby003, Hobby010
Jika Anda menulis kode traversal koleksi yang lebih kompleks, seperti yang disebutkan sebelumnya (ditampilkan secara terpisah setiap subkunci) , Anda mendapatkan hasilnya:
Hobi:
Nilai subkunci 1 = Hobi025
Nilai subkunci 2 = Hobby003
Nilai subkunci 3 = Hobby010
Perlu dicatat bahwa dalam dua kasus, kontrol yang tidak dipilih tidak mengembalikan nilai apa pun. Pada hasil kasus pertama, tidak ada koma yang menipu, dan tidak ada nilai nol pada kasus kedua. Hal ini berbeda dengan hasil pengujian setara menggunakan kotak teks yang dijelaskan di atas. Saat menggunakan kotak teks, setiap kotak teks mengembalikan nilai, bahkan string kosong. Hal ini disebabkan oleh browser. Oleh karena itu, Anda harus memperhatikan masalah ini ketika mengakses koleksi dalam kode ASP.
Efek samping rumit dari situasi di atas adalah ketika menggunakan kotak centang, indeks nilai kotak centang tidak ada hubungannya dengan posisi kontrol dalam HTML asli. Dalam contoh di atas, kotak centang keempat memiliki nomor subkunci 3. , karena saat formulir diserahkan, kontrol kedua tidak dipilih.
c) Kontrol daftar HTML
Tag <SELECT> dalam HTML digunakan untuk menghasilkan kotak daftar drop-down standar, yang nilainya direpresentasikan dalam cara hibrid yang menarik. Formulir berikut dibuat dengan 5 nilai untuk dipilih pengguna. Karena berisi atribut MULTIPLE, dimungkinkan untuk memilih lebih dari satu entri dengan menahan tombol Shift atau Ctrl saat memilih.
<FORM ACTION=”show_request.asp” METODE=”POST”>
<PILIH NAMA=”Hobi” UKURAN=”5” GANDA>
<OPTION VALUE=”Hobby001”>Pemrograman</OPTION>
<OPTION VALUE=”Hobi025”>Berenang</OPTION>
<OPTION VALUE=”Hobi003”>Membaca</OPTION>
<OPTION VALUE=”Hobi068”>Makan</OPTION>
<OPTION VALUE=”Hobi010”>Tidur</OPTION>
</PILIH><P>
<INPUT TYPE=”KIRIM” NILAI=”Kirim”>
</FORM>
inimengembalikan satu entri dalam kumpulan Formulir, yang berisi nilai yang dipilih (atribut VALUE yang ditentukan dalam tag <OPTION> tunggal), dipisahkan dengan koma:
Hobby = Hobby025, Hobby003, Hobby010
if Dengan menggunakan kode traversal set yang sedikit lebih rumit (menampilkan setiap subkunci satu per satu), kita mendapatkan:
Hobi:
Nilai subkunci 1 = Hobi025
Nilai subkunci 2 = Hobby003
Nilai subkunci 3 = Hobby010
Situasinya sama seperti di atas untuk kotak centang dengan nama yang sama. Faktanya, daftar SELECT dapat dianggap sebagai daftar kotak centang untuk memilih (bukan mencentang) item terkait.
Namun, kotak daftar juga memiliki nilai yang ditentukan. Jika Anda mengatur atribut VALUE di tag <OPTION>, Anda akan mendapatkan konten teks dari opsi yang dipilih. Kumpulan Request.Form akan berisi item seperti:
Hobi = Berenang, Membaca, Tidur
dan, Demikian pula, kode iterasi koleksi yang lebih kompleks akan memberikan hasil seperti ini:
Hobi:
Nilai subkunci 1 = Berenang
Nilai subkunci 2 = Membaca
Subkey 3 value = Sleeping
Tentu saja, jika satu item dipilih dan atribut VALUE disediakan di <OPTION>, hasilnya hanya akan berisi:
Hobby = Hobby025.
Jika atribut VALUE tidak disediakan, hasilnya adalah:
Hobby = Berenang.
Ini memungkinkannya untuk hilang. Provinsi (yaitu, tidak ada VALUE) menampilkan teks opsi dan juga dapat membuat perubahan yang sesuai. Kasus terakhir ini sangat berguna dalam situasi tertentu, seperti ketika Anda ingin menampilkan (string deskriptif) dan meneruskan konten yang sama sekali berbeda (seperti menggunakan kode pendek untuk mewakili string deskriptif).
d) Pengiriman HTML dan kontrol gambar
Kotak centang dan tombol radio adalah contoh kontrol boolean yang kembali "aktif" ketika dicentang atau dipilih. Tidak seperti kotak teks dan sebagian besar kontrol HTML lainnya, browser tidak menyertakan kontrol yang tidak dicentang atau dipilih tidak dipilih.
Ada kontrol Boolean lain yang umum digunakan yang disebut tombol HTML. Seperti tipe <INPUT TYPE="SUBMIT">, <INPUT TYPE="RESET">, <INPUT TYPE="IMAGE">, <INPUT TYPE="BUTTON"> dan <BUTTON>...</BUTTON>.
Kontrol tipe BUTTON tidak mengembalikan nilai apa pun karena tidak memiliki dampak langsung pada formulir. Bahkan jika Anda menggunakan metode Kirim yang digunakan untuk memanggil formulir, browser tidak akan menyertakan nilai kontrol tipe BUTTON dalam permintaan apa pun. Demikian pula, nilai tombol <INPUT TYPE="RESET"> tidak pernah dikirim ke server.
Namun, kontrol tombol masukan seperti SUBMIT dan IMAGE sebenarnya mengirimkan formulir ke server, dan properti VALUE-nya berisi nilai kontrol formulir lainnya (selama atribut NAME disertakan dalam definisi HTML). Misalnya, formulir ini mungkin merupakan bagian dari aplikasi Web tipe wizard yang memungkinkan pengguna untuk melewati atau membatalkan suatu proses:
<FORM ACTION="show_request.asp" METHOD="POST">
<INPUT TYPE=”KIRIM” NAMA=”btnKirim” VALUE=”Berikutnya”>
<INPUT TYPE=”KIRIM” NAMA=”btnKirim” VALUE=”Sebelumnya”>
<INPUT TYPE=”SUBIMT” NAME=”btnSubmit” VALUE=”Batal”>
</FORM>
Dalam sebuah formulir, Anda dapat menyertakan beberapa tombol KIRIM. Dalam hal ini, setiap tombol harus diberi atribut VALUE unik, seperti yang ditunjukkan di atas. Saat formulir dikirimkan, menelusuri nilai kumpulan Request.Form akan menghasilkan nilai yang bergantung pada tombol mana yang ditekan untuk mengirimkan formulir. Jika user menekan tombol "Sebelumnya" maka akan mendapatkan:
btnSubmit = Sebelumnya
Oleh karena itu, kumpulan Request.Form dapat ditanyakan untuk menentukan halaman yang ditampilkan berikutnya, misalnya:
Select Case Request.Form("btnSubmit")
Kasus "Selanjutnya"
Respon.Redirect "page_3.asp"
Kasus "Sebelumnya"
Respon.Redirect "page_1.asp"
Kasus "Batal"
Respon.Redirect "main_menu.asp"
Pilihan Akhir
Pada saat yang sama, Anda juga dapat menggunakan atribut NAMA yang berbeda untuk setiap tombol sesuai kebutuhan. Dan pilih nama kontrol yang nilainya terdapat dalam kumpulan Formulir. Sangat berguna dalam situasi di mana kontrol tidak memiliki markup lengkap namun diikuti oleh label teks yang lebih panjang, seperti yang ditunjukkan pada gambar di bawah.
Antarmuka pada layar ini dihasilkan oleh kode berikut:
<FORM ACTION="show_request.asp" METHOD="POST">
<B>Apa yang ingin kamu lakukan sekarang?</B><P>
<INPUT TYPE=”SUBMIT” NAME=”btnNext” VALUE= ”>Lanjutkan ke halaman berikutnya<P>
<INPUT TYPE=”SUBMIT” NAME=”btnPrevious” Value=” ”> Kembali ke halaman sebelumnya<P>
<INPUT TYPE=”SUBMIT” NAME=”btnCancel” VALUE=” ”>Batal dan kembali ke halaman menu utama<P>
</FORM>
Di halaman ASP, setelah menerima data, Anda dapat memeriksa nilai yang diberikan oleh nama tombol untuk menentukan tombol mana yang ditekan.
Jika Len(Request.Form(“btnNext”)) Kemudian Response.Redirect “page_3.asp”
Jika Len(Request.Form(“btnPrevious”)) Kemudian Response.Redirect “page_1.asp”
If Len(Request.Form("btnCancel")) Then Response.Redirect "main_menu.asp"
Tugas ini adalah menanyakan koleksi ASP pada kunci dan mengembalikan string kosong jika tidak ada. Dengan kata lain, jika tombol kedua (halaman sebelumnya) ditekan, nilai Request.Form("btnNext") adalah string kosong, dan panjangnya nol tanpa menghasilkan kesalahan. Ketika tombol kedua ditekan, nilai entri ini dalam kumpulan Formulir, Request.Form("btnPrevious"), akan menjadi " " dan panjangnya lebih besar dari nol.
e) Meningkatkan efisiensi penggunaan koleksi Permintaan.
Mengakses koleksi ASP untuk mengunduh nilai adalah proses yang memakan waktu dan intensif komputasi karena operasinya melibatkan serangkaian pencarian koleksi terkait, yang jauh lebih lambat dibandingkan mengakses variabel lokal. Oleh karena itu, jika Anda berencana untuk menggunakan nilai dalam koleksi beberapa kali pada halaman, Anda harus mempertimbangkan untuk menyimpannya sebagai variabel lokal, misalnya:
strTitle = Request.Form("Title")
strNamaDepan = Permintaan.Formulir("NamaDepan")
strLastName = Permintaan.Form("Nama Belakang")
Jika Len(stTitle) Maka strTitle = strTitle & “ “
Jika strFirstName = " " Lalu
StrFullName = strJudul & " " & strNama Terakhir
ElseIf Len(strFirstName) = 1 Lalu
StrFullName = strTitle & strFirstName & “· “ & strLastName
Kalau tidak
StrFullName = strTitle & strFirstName & " " & strLastName
Akhir Jika
f) Cari semua koleksi Permintaan
Dalam beberapa kasus, dimungkinkan untuk mengetahui bahwa nama kunci dari suatu nilai akan muncul dalam koleksi Permintaan, namun tidak mengetahui secara pasti koleksi mana itu. Misalnya, jika beberapa halaman (atau bagian halaman yang berbeda) mengirimkan nilai ke skrip ASP yang sama, nilai tersebut mungkin muncul di koleksi Formulir atau QueryString.
Untuk melihat mengapa suatu nilai dapat muncul di koleksi berbeda, pertimbangkan situasi ini: halaman diminta menggunakan elemen hyperlink <A>. Dalam hal ini, satu-satunya cara untuk menambahkan nilai pada permintaan adalah dengan menambahkannya ke URL. Namun, nilai yang sama mungkin sudah muncul di <FORM> pada halaman lain, atau di bagian berbeda pada halaman yang sama:
...
<FORM ACTION=”process_page.asp” METODE=”POST”>
<INPUT TYPE=”KIRIM” NAMA=”halaman” VALUE=”Berikutnya”>
<INPUT TYPE=”KIRIM” NAMA=”halaman” VALUE=”Sebelumnya”>
<INPUT TYPE=”KIRIM” NAMA=”halaman” VALUE=”Bantuan”>
</BENTUK>
...
...
Untuk bantuan, buka <A HREF=”process_page.asp?page=Help”>Halaman Bantuan</A>
...
Dalam hal ini, menekan tombol Bantuan pada formulir akan mengirimkan pasangan nama/nilai "page=Help" dari koleksi Request.Form. Namun, menekan hyperlink <A> juga dapat mengirimkan nama/nilai "Page=Help", tetapi kali ini dalam koleksi QueryString. Untuk mengakses nilai ini, gunakan fitur khusus objek Permintaan ASP:
strPage = Request("page")
Ini akan mencari seluruh koleksi - QueryString, Form, Cookies, ClientCertificate, ServerVariables - secara berurutan, hingga nama nilai pertama yang cocok ditemukan. Melakukan hal ini kurang efisien dibandingkan mengakses koleksi yang sesuai secara langsung, dan tidak aman kecuali ada jaminan mutlak bahwa nilainya tidak akan muncul di koleksi lain.
Misalnya, Anda mungkin ingin mengumpulkan nama server Web yang memenuhi permintaan klien dengan mencari "SERVER_NAME" di koleksi Request.ServerVariables yang muncul di setiap kueri. Namun, jika koleksi lain juga berisi nilai bernama "server_name" (ingat bahwa nama kunci tidak peka huruf besar-kecil), Anda akan mendapatkan hasil yang salah saat menggunakan Request("server_name"). Dengan menggunakan sintaks Reqeust.ServerVariables("server_name") kita akan kesulitan melacak kesalahan.
Singkatnya, gunakan teknik "telusuri semua koleksi" dengan sangat hati-hati dan hanya jika tidak ada teknik lain yang memberikan hasil yang Anda perlukan.
g) Akses koleksi lainnya
Pada bagian artikel ini, kami berfokus pada koleksi Formulir, yang mungkin merupakan koleksi yang paling banyak digunakan. Namun, semua teknik ini juga dapat diterapkan pada objek lain. Termasuk yang disediakan oleh koleksi objek Permintaan (yaitu Formulir, QueryString, Cookies, ServerVariables, dan ClientCertificate), dan cookie (dan koleksi yang disediakan oleh objek lain) yang disediakan oleh objek Response.
Kita akan melihat secara singkat bagaimana suatu nilai dimasukkan ke dalam koleksi QueryString, beserta kelebihan dan kekurangannya. Namun, kedua kumpulan cookie tersebut memiliki fungsi tambahan yang membuat penggunaan cookie menjadi lebih nyaman, seperti yang dibahas di bawah.