Verifikasi Klien
Jika halaman Anda mengaktifkan otentikasi klien, urutan peristiwa yang sama sekali berbeda terjadi selama perjalanan pulang pergi. Otentikasi klien diimplementasikan menggunakan Client JScript®. Tidak ada komponen biner yang diperlukan untuk mengimplementasikan verifikasi ini.
Meskipun bahasa JScript standar dengan baik, tidak ada standar yang diadopsi secara luas untuk model objek dokumen (DOM) yang digunakan untuk berinteraksi dengan dokumen HTML di browser. Oleh karena itu, otentikasi klien hanya dilakukan di Internet Explorer 4.0 dan yang lebih baru karena objek otentikasi adalah Internet Explorer DOM.
Dari perspektif server, verifikasi klien hanya berarti bahwa kontrol verifikasi mengirimkan konten yang berbeda ke HTML. Selain itu, urutan acaranya persis sama. Pemeriksaan sisi server masih dijalankan. Meskipun mungkin tampak berlebihan, ini sangat penting karena:
Beberapa kontrol verifikasi mungkin tidak mendukung skrip klien. Ada contoh yang baik: Jika Anda ingin menggunakan fungsi verifikasi CustomValidator dan Server, tetapi tidak ada fungsi verifikasi klien.
Tindakan pencegahan keselamatan. Beberapa orang dapat dengan mudah mendapatkan halaman dengan skrip dan kemudian menonaktifkan atau mengubah halaman itu. Anda tidak boleh menggunakan skrip untuk mencegah data yang buruk memasuki sistem Anda, tetapi hanya untuk mendapatkan umpan balik yang lebih cepat dari pengguna. Oleh karena itu, jika Anda ingin menggunakan CustomValidator, Anda tidak boleh memberikan fungsi verifikasi klien tanpa fungsi verifikasi server yang sesuai.
Setiap kontrol verifikasi memastikan bahwa blok skrip klien standar dikirim ke halaman. Sebenarnya, ini hanyalah sebagian kecil dari kode yang berisi referensi ke kode dalam webuivalidation pustaka skrip.js. File Perpustakaan Script ini berisi semua logika untuk verifikasi klien.
Tentang Perpustakaan Script
Karena skrip kontrol web verifikasi ada di pustaka skrip, tidak perlu mengirim semua kode yang diverifikasi klien langsung ke halaman, meskipun tampaknya melakukannya di permukaan. Referensi file skrip utama terlihat seperti ini:
<bahasa skrip = "javascript"
src = "/_ aspx/1.0.9999/skrip/webuivalidation.js"> </script>
Secara default, file skrip diinstal di direktori root default di direktori "_aspx" dan dipanggil dengan skrip root-relative termasuk Directive, yang dimulai dengan slash maju. Referensi ini menunjukkan bahwa setiap objek individu tidak harus berisi pustaka skrip, dan semua halaman di komputer yang sama dapat merujuk file yang sama. Anda akan melihat bahwa ada juga nomor versi runtime bahasa umum di jalur ini sehingga versi runtime yang berbeda dapat berjalan di komputer yang sama.
Jika Anda melihat direktori root virtual default Anda, Anda akan menemukan file dan melihat kontennya. Lokasi file -file ini ditentukan dalam file config.web. File config.web adalah file XML untuk sebagian besar pengaturan ASP+. Berikut ini adalah definisi lokasi dalam file:
<WebControls
clientScriptSlocation = "/_ aspx/{0}/skrip/"
/>
Anda didorong untuk membaca naskah untuk mendapatkan wawasan tentang apa yang terjadi. Namun, Anda disarankan agar Anda tidak memodifikasi skrip ini, karena fungsinya terkait erat dengan versi runtime tertentu. Ketika versi runtime diperbarui, skrip ini juga mungkin memerlukan pembaruan yang sesuai, dan Anda akan meninggalkan perubahan atau menghadapi masalah yang tidak berfungsi dengan skrip. Jika proyek tertentu harus mengubah skrip ini, cadangkan skrip terlebih dahulu dan kemudian arahkan proyek Anda ke file cadangan dengan mengganti lokasi file -file ini dengan file config.web pribadi. Jika string berisi instruksi format "{0}", nomor versi runtime akan menggantikan instruksi. Yang terbaik adalah mengubah lokasi itu menjadi referensi relatif atau absolut.
Nonaktifkan otentikasi klien
Terkadang Anda mungkin tidak ingin otentikasi klien. Jika jumlah bidang input kecil, verifikasi klien mungkin sedikit berguna. Lagi pula, Anda harus memiliki logika yang perlu bepergian ke dan dari server sekali setiap waktu. Anda akan menemukan bahwa informasi yang muncul secara dinamis pada klien akan memiliki dampak negatif pada tata letak Anda.
Untuk menonaktifkan otentikasi klien, gunakan arahan halaman "clienttarget = downlevel". Petunjuk ini mirip dengan awal file ASPX berikut:
< %@ Halaman bahasa = "c#" clientTarget = DownLevel %>
Nilai default dari arahan ini adalah "Auto", yang berarti Anda hanya melakukan otentikasi klien untuk Microsoft Internet Explorer 4.0 atau lebih baru.
Catatan: Sayangnya, dalam Beta 1, arahan ini tidak hanya menonaktifkan verifikasi, tetapi juga menyebabkan semua kontrol web diproses menggunakan tag HTML 3.2, yang dapat menghasilkan hasil yang tidak terduga. Versi final memberikan cara yang lebih baik untuk mengendalikan masalah ini.
Urutan acara klien
Urutan ini adalah urutan peristiwa yang terjadi saat menjalankan halaman yang berisi validasi klien:
Ketika halaman dimuat ke browser, setiap kontrol verifikasi perlu diinisialisasi beberapa waktu. Kontrol ini dikirim sebagai tag <span>, dan atribut HTML mereka paling dekat dengan yang ada di server. Yang paling penting, semua elemen input yang dirujuk oleh validator "dipasang" saat ini. Elemen input yang direferensikan akan memodifikasi acara kliennya sehingga rutin verifikasi dipanggil setiap kali input berubah.
Kode di pustaka skrip akan dieksekusi ketika pengguna beralih di antara bidang menggunakan tombol tab. Ketika bidang yang terpisah berubah, kondisi verifikasi dievaluasi kembali, membuat validator terlihat atau tidak terlihat sesuai kebutuhan.
Ketika pengguna mencoba mengirimkan formulir, semua validator dievaluasi kembali. Jika semua validator ini valid, formulir akan dikirimkan ke server. Jika ada satu atau lebih kesalahan, situasi berikut akan terjadi:
Pengajuan dibatalkan. Formulir tidak dikirimkan ke server.
Semua validator yang tidak valid terlihat.
Jika ringkasan verifikasi berisi showummary = true, semua kesalahan dari kontrol verifikasi dikumpulkan dan isinya diperbarui dengan kesalahan tersebut.
Jika ringkasan verifikasi berisi showmessageBox = true, kesalahan dikumpulkan dan ditampilkan di kotak informasi klien.
Karena kontrol verifikasi klien dieksekusi setiap kali perubahan dimasukkan atau diserahkan, kontrol verifikasi ini biasanya dievaluasi pada klien dua kali atau lebih kali. Harap dicatat bahwa setelah pengiriman, kontrol verifikasi ini masih akan dievaluasi kembali di server.
API Klien
Ada API kecil yang dapat digunakan pada mesin klien untuk mencapai berbagai efek dalam kode klien Anda sendiri. Karena beberapa rutin tidak dapat disembunyikan, secara teori, Anda dapat memanfaatkan klien untuk memverifikasi semua variabel, fitur, dan fungsi yang ditentukan oleh skrip. Namun, banyak dari ini adalah detail implementasi yang dapat diubah. Berikut ini merangkum objek klien yang kami mendorong Anda untuk digunakan.
Tabel 3. Objek Klien
Jenis Nama Deskripsi
Variabel boolean page_isvalid menunjukkan apakah halaman saat ini valid. Script verifikasi selalu membuat variabel tetap mutakhir.
Page_validators Elemen Array Ini adalah array yang berisi semua validator di halaman.
Variabel boolean page_validationactive menunjukkan apakah verifikasi harus dilakukan. Mengatur variabel ini ke false dapat dimatikan dengan pemrograman.
Properti ISValid Boolean Setiap validator klien memiliki properti ini yang menunjukkan apakah validator saat ini valid. Perhatikan bahwa dalam versi PDC, properti ini dicampur dengan huruf besar dan kecil ("isValid").
Melewati otentikasi klien
Salah satu tugas yang sering Anda lakukan adalah menambahkan tombol batal atau tombol navigasi pada halaman. Dalam hal ini, Anda mungkin ingin mengirimkan halaman menggunakan tombol, bahkan jika ada kesalahan pada halaman. Karena acara klien "OnClick" terjadi sebelum acara "Onsubmit" dari formulir, itu dapat menghindari mengirimkan cek dan melewati verifikasi. Berikut ini menjelaskan cara menyelesaikan tugas menggunakan kontrol gambar HTML sebagai tombol batal:
<Input Type = Image Runat = Server
nilai = "Batal"
OnServerClick = cmdcancel_click>
Melaksanakan tugas ini menggunakan tombol atau Kontrol ImageButton akan menyebabkan kebingungan karena acara "OnClick" diasumsikan sebagai acara sisi server dengan nama yang sama. Anda harus mengatur acara dalam skrip klien:
<ASP: ImageButton runat = server id = cmDimgCancel
AlternateText = "batal"
OnClick = cmdcancel_click/>
<bahasa skrip = "javascript">
document.all ["cmdimgcancel"]. Onclick =
fungsi baru ("page_validationactive = false;");
</script>
Cara lain untuk menyelesaikan masalah ini adalah dengan mengatur tombol batal sehingga tidak memicu acara komit dalam skrip klien saat kembali. Kontrol HTMlinputButton dan LinkButton adalah contoh dari ini.
Efek khusus
Persyaratan umum lainnya adalah bahwa jika terjadi kesalahan, selain pesan kesalahan yang ditampilkan oleh validator itu sendiri, ada efek lain yang diperlukan. Dalam hal ini, modifikasi apa pun yang Anda buat harus dilakukan secara bersamaan di server atau klien. Misalkan Anda perlu menambahkan label untuk mengubah warna tergantung pada apakah input valid atau tidak. Berikut adalah cara mengimplementasikan tugas ini di server:
Public Class ChangeColorPage: Page {
label publik lblzip;
RegularExpressivalidator Public Valzip;
override void onload yang dilindungi (EventArgs e) {
lblzip.forecolor = valzip.isvalid?
}
}
Semua metode di atas sempurna, tetapi selama Anda memodifikasi verifikasi seperti yang disebutkan di atas, Anda akan menemukan bahwa kecuali Anda melakukan hal yang sama pada klien, itu akan terlihat sangat tidak konsisten. Kerangka kerja verifikasi akan mencegah Anda dari banyak efek ganda ini, tetapi tidak dapat menghindari efek lain yang harus Anda capai secara bersamaan pada klien dan server. Berikut ini cuplikan melakukan tugas yang sama pada klien:
<ASP: Label ID = lblzip runat = server
Text = "Kode Zip:"/>
<ASP: TextBox ID = txtzip runat = server
/> </asp: TextBox> <br>
<ASP: RegularExpressionValidator ID = Valzip runat = Server
ControlTovalidate = txtzip
Errormessage = "kode pos tidak valid"
ValidationExpression = "[0-9] {5}" /> <br>
<bahasa skrip = javascript>
function txtziponchange () {
// Jika otentikasi klien tidak aktif, tidak ada tindakan yang dilakukan
if (typeof (page_validators) == "tidak terdefinisi") kembali;
// Ubah warna label
lblzip.style.color = valzip.isvalid? "Hitam": "merah";
}
</script>
API Klien Beta 1
Untuk versi beta 1, beberapa fungsi yang dapat dipanggil dari skrip klien dapat menyebabkan situasi lain.
Tabel 4. Fungsi dipanggil dari skrip klien
Deskripsi Nama
ValidatorValidate (VAL) mengambil validator klien sebagai input. Buat validator periksa inputnya dan perbarui tampilannya.
ValidatorEnable (Val, Enable) Mendapat validator klien dan nilai boolean. Mengaktifkan atau menonaktifkan validator klien. Jika dinonaktifkan, validator klien tidak akan dievaluasi dan validator klien akan selalu muncul sebagai valid.
ValidatorHookUpControl (Control, Val) mendapatkan elemen HTML input dan validator klien. Ubah atau buat acara Ubah untuk elemen itu sehingga validator diperbarui saat berubah. Fungsi ini cocok untuk validator khusus berdasarkan beberapa nilai input.
Tujuan khususnya adalah untuk mengaktifkan atau menonaktifkan validator. Jika Anda ingin verifikasi menjadi efektif hanya dalam situasi tertentu, Anda mungkin perlu mengubah status aktivasi pada server dan klien, jika tidak, Anda akan menemukan bahwa pengguna tidak dapat mengirimkan halaman.
Berikut ini adalah contoh di atas ditambah bidang yang divalidasi hanya ketika kotak centang tidak dicentang.
Kelas Publik Bersyarat: Halaman {
htmlinputcheckbox publik chksameas;
Publik wajib Dibutuhkan Validator RFValShipAddress;
override void validate () {
bool enableship =! chksameas.checked;
rfvalshipAddress.enabled = enableShip;
base.validate ();
}
}
Berikut adalah kode setara klien:
<Jenis input = kotak centang runat = ID server = chksameas
> Sama seperti alamat pembayaran <br>
<bahasa skrip = javascript>
fungsi onchangesameas () {
var enableship =! event.srcelement.status;
ValidatorEnable (RFValShipAddress, Enableship);
}
</script>