Dalam -Depth Penjelasan ASP+ Verifikasi
Anthony Moore
Microsoft Corporation
Oktober 2000
Ringkasan: Penjelasan terperinci untuk penggunaan kontrol web ASP+ verifikasi.
Daftar isi
Pendahuluan singkat
Memulai
Kapan itu terjadi?
Urutan verifikasi di sisi server
Verifikasi Klien
Aturan yang efektif dan informasi kesalahan yang berguna
Fungsi yang diaktifkan, terlihat, dan menampilkan properti
Kontrol CustomValidator
Kontrol mana yang dapat diverifikasi?
Akhir
-------------------------------------------------- -------------------------------------------------- ------------------------
Pendahuluan singkat
Artikel ini menjelaskan metode kerja kontrol verifikasi ASP+ secara rinci. Jika Anda ingin menghasilkan halaman kompleks yang berisi kontrol verifikasi, atau untuk memperluas kerangka kerja verifikasi, disarankan agar Anda membaca artikel ini. Jika Anda ingin belajar menggunakan kontrol verifikasi atau memutuskan apakah akan menggunakan kontrol verifikasi, lihat "ASP+ pengguna masukkan verifikasi (bahasa Inggris)".
Memulai
Kita tahu bahwa penting untuk memahami verifikasi selama seluruh proses pengembangan ASP+. Lihatlah sebagian besar situs web komersial saat ini, Anda akan menemukan bahwa ada banyak bentuk di situs -situs ini, yang jelas dieksekusi dengan mengeksekusi sejumlah besar kode tulisan tangan. Menulis kode verifikasi bukanlah pekerjaan yang menarik. Jika Anda menulis kode untuk menampilkan tabel data atau secara dinamis menghasilkan grafik, itu mungkin sangat menarik, tetapi tidak ada yang dapat mengkonfirmasi dengan rekan -rekannya bahwa metode "keren" ini dapat melarang nilai kosong di bidang nama.
Karena alasan lain, verifikasi aplikasi web juga sangat merepotkan. HTML 3.2 memiliki banyak batasan pada konten yang dapat Anda kendalikan atau umpan balik yang dapat Anda dapatkan dari pengguna, sehingga tidak dapat diterapkan pada teknik yang dapat digunakan pada klien yang lebih memuaskan, seperti melarang pengguna memasukkan karakter tertentu atau membuat suara. Menggunakan skrip browser dapat menghasilkan verifikasi yang lebih kuat. Namun, metode ini sulit untuk dikonfirmasi, karena browser pelanggan tidak harus skrip, dan pengguna jahat dapat memotongnya. Oleh karena itu, untuk memastikan keamanan situs, perlu melakukan inspeksi server yang sama.
Saat mengembangkan ASP+, niat asli kami adalah menggunakan hanya satu kontrol untuk memproses verifikasi. Tetapi ketika itu dirancang, saya menemukan bahwa keinginan ini tidak dapat dicapai. Kami telah meneliti sejumlah besar formulir input data untuk menemukan solusi yang dapat diterapkan pada sebanyak mungkin bentuk. Kami menemukan bahwa tabel input data memiliki banyak fitur menarik:
Meskipun informasi atau ikon kesalahan sering berdekatan dengan elemen input, mereka hampir selalu terletak di sel yang berbeda dari tabel.
Seringkali ada area di halaman untuk meringkas semua kesalahan.
Banyak situs termasuk skrip klien untuk memberikan umpan balik yang lebih cepat sambil mencegah perjalanan antara server dengan sia -sia.
Banyak situs yang berisi skrip klien menampilkan kotak informasi saat ada kesalahan.
Tidak hanya input teks akan diverifikasi, tetapi juga daftar drop -down dan tombol single -selection akan diverifikasi.
Jika bidang kosong, situs biasanya menunjukkan informasi atau ikon yang berbeda ketika entri tidak valid.
Banyak pemeriksaan yang efektif dapat digantikan dengan baik oleh ekspresi yang umum digunakan.
Verifikasi biasanya didasarkan pada hasil perbandingan antara dua input.
90% atau lebih dari 90% dari tugas verifikasi adalah beberapa operasi umum, seperti memeriksa nama atau kode pos. Sebagian besar situs tampaknya masih mengulangi tugas -tugas ini.
Karena perbedaan antar situs biasanya terlalu besar, solusi sempurna tidak dapat diperoleh untuk menangani semua tugas verifikasi dari setiap situs.
Mempertimbangkan semua situasi di atas, solusi akhir mencakup lima kontrol perangkat verifikasi, kontrol validasi, dan integrasi dengan objek halaman. Pada saat yang sama, jelas bahwa solusi perlu diperluas, dan API diperlukan untuk bekerja sama pada klien dan server.
Kami menemukan bahwa kami tampaknya membutuhkan kotak alat yang lebih besar selama berbagai verifikasi penelitian. Di sebagian besar lingkungan komponen, seperti Microsoft® ActiveX®, kami mungkin telah mencoba mengintegrasikan fungsi semua kontrol verifikasi ke dalam kontrol untuk memproses atribut yang berbeda dalam mode yang berbeda. Untungnya, ada warisan magis di Microsoft® .NET Framework.
Sebagian besar kontrol ini diimplementasikan dalam basevalidator tingkat induk publik mereka. Anda juga dapat menyelesaikan berbagai tugas dari Basevalidator atau kontrol lainnya. Bahkan, bahkan jika Basevalidator terlalu malas untuk mencapai atribut teksnya sendiri, ia diwarisi dari atribut label.
Kapan itu terjadi?
Sangat efektif untuk memahami urutan peristiwa saat memproses halaman yang berisi halaman kontrol web. Jika kondisi verifikasi adalah opsional, Anda perlu memahami secara akurat ketika klien dan server diverifikasi. Jika Anda ingin menulis rutinitas verifikasi sendiri, mungkin sudah sangat membuat waktu atau efek samping. Pada saat yang sama, penting juga untuk memahami waktu panggilan verifikasi rutin.
Pertama, mari kita lihat server.
Urutan verifikasi di sisi server
Penting untuk memahami periode validitas halaman. Jika Anda terbiasa memproses formulir dalam Visual Basic atau alat klien fungsional yang serupa, Anda perlu menghabiskan waktu tertentu untuk memahami. Semua objek pada halaman dan halaman tidak efektif saat berinteraksi dengan pengguna, meskipun terkadang ini sama.
Berikut ini adalah urutan acara yang disederhanakan saat mengunjungi halaman untuk pertama kalinya:
Buat halaman dan kontrolnya berdasarkan file ASPX.
Memicu acara page_load.
Halaman dan atribut kontrol disimpan di bidang tersembunyi.
Halaman dan kontrol dikonversi menjadi HTML.
Buang semuanya.
Sekarang, ketika pengguna mengklik tombol atau kontrol yang serupa, itu akan kembali ke server dan kemudian menjalankan urutan acara yang serupa. Urutan ini disebut urutan pengembalian:
Buat halaman dan kontrolnya berdasarkan file ASPX.
Kembalikan halaman dan kontrol atribut dari bidang tersembunyi.
Masukkan Kontrol Halaman Pembaruan sesuai dengan pengguna.
Memicu acara page_load.
Memicu perubahan acara pemberitahuan.
Halaman dan atribut kontrol disimpan di bidang tersembunyi.
Halaman dan kontrol dikonversi menjadi HTML.
Buang semuanya lagi.
Mengapa kita tidak menyimpan semua objek dalam memori? Karena situs web yang ditetapkan dengan ASP+ tidak dapat menangani sejumlah besar pengguna. Oleh karena itu, memori server hanya mempertahankan konten yang akan segera diproses.
Kapan verifikasi server -side? Saat mendapatkan informasi halaman untuk pertama kalinya, verifikasi server -side tidak akan dilakukan sama sekali. Sebagian besar pengguna akhir sangat serius.
Dalam urutan acara kembali, verifikasi akan dilakukan antara langkah 3 dan langkah 4. Dengan kata lain, verifikasi adalah setelah atribut kontrol pemuatan data dari pengguna, tetapi sebelum sebagian besar jumlah eksekusi kode. Ini berarti bahwa ketika menulis acara pengguna, biasanya dapat digunakan untuk verifikasi. Dalam keadaan normal, Anda ingin melakukan ini.
Kerugian verifikasi pada saat itu adalah: jika Anda ingin memodifikasi beberapa atribut yang mempengaruhi verifikasi dengan pemrograman, itu akan terlambat. Misalnya, Anda akan menemukan bahwa jika Anda menggunakan kode untuk mengaktifkan atau menonaktifkan atribut kontrol verifikasi atau memodifikasi kontrol verifikasi, Anda tidak akan melihat efek apa pun sebelum memproses halaman. Masalah ini dapat dihindari melalui dua metode berikut:
Ubah atribut sebelum verifikasi.
Ulang kembali kontrol setelah perubahan atribut.
Kedua metode perlu menggunakan atribut verifikasi yang efektif dan metode pada objek halaman.
API Halaman
Objek halaman mencakup beberapa atribut dan metode penting yang terkait dengan verifikasi server -side. Tabel 1 merangkum atribut dan metode ini:
Tabel 1. Atribut dan Metode Objek Halaman
Atribut atau deskripsi metode
Atribut isValid adalah atribut yang paling berguna. Atribut ini dapat memeriksa apakah seluruh formulir efektif. Cek ini biasanya dilakukan sebelum memperbarui database. Hanya semua objek validator yang valid, atributnya benar, dan nilainya tidak disimpan dalam cache.
Validator mengaitkan kumpulan semua objek verifikasi halaman ini. Ini adalah kumpulan objek yang mengimplementasikan antarmuka ivalidator.
Metode nilai memanggil metode saat verifikasi. Metode eksekusi default pada objek halaman adalah untuk beralih ke setiap perangkat verifikasi dan mengharuskan perangkat verifikasi untuk mengevaluasi dirinya sendiri.
Koleksi validator sangat berguna untuk banyak tugas. Set ini adalah kumpulan objek yang mengimplementasikan antarmuka ivalidator. Alasan mengapa saya menggunakan objek bukanlah kontrol kontrol karena objek halaman hanya memperhatikan antarmuka ivalidator. Karena semua verifikasi biasanya digunakan untuk mencapai beberapa kontrol visual ivalidator, siapa pun harus dapat menggunakan objek verifikasi apa pun dan menambahkan objek verifikasi ke halaman.
Antarmuka ivalidator berisi atribut dan metode berikut:
Tabel 2. Atribut dan metode antarmuka ivalidator
Atribut atau deskripsi metode
Atribut isValid menunjukkan apakah uji validitas yang dilakukan oleh objek verifikasi terpisah telah berlalu. Anda dapat mengubah nilai secara manual setelah verifikasi.
Atribut ErrorMessage memperkenalkan kesalahan untuk memverifikasi objek yang akan diverifikasi dan kesalahan yang dapat ditampilkan kepada pengguna.
Metode validasi diperiksa untuk validitas objek verifikasi untuk memperbarui nilai isvalidnya.
Anda dapat menggunakan antarmuka ini untuk melakukan beberapa tugas menarik. Misalnya, untuk mengatur ulang halaman ke keadaan yang efektif, gunakan kode berikut (seperti contoh yang ditunjukkan dalam C#):
Nilai ivalidator;
Foreach (val in validators) {
valuevalid = true;
}
Untuk mengeksecute seluruh urutan verifikasi, gunakan kode berikut:
Nilai ivalidator;
Foreach (val in validators) {
Val.validate ();
}
Jika Anda memiliki edisi beta 1 atau versi yang lebih tinggi, Anda juga dapat memanggil metode nilai hanya untuk objek halaman, sehingga tugas yang sama dapat diselesaikan. Untuk membuat beberapa perubahan sebelum verifikasi, metode nilai dapat dibahas. Contoh ini menunjukkan halaman yang berisi perangkat verifikasi, yang dibuka atau dimatikan sesuai dengan nilai kotak centang:
Kelas Publik Bersyarat: Halaman {
htmlinputcheckbox publik chksameas;
Public ResearchFieldValidator RFValShipAddress;
Override void validate () {) {) yang dilindungi
// Cukup periksa alamat pengiriman (jika berbeda dari alamat pembayaran)
Bool enableship =!
rfvalshipAddress.enabled = enableShip;
// Sekarang menjalankan verifikasi
base.validate ();
}
}
Verifikasi Klien
Jika halaman Anda diaktifkan oleh verifikasi klien, urutan peristiwa yang sama sekali berbeda akan terjadi selama perjalanan pulang pergi. Verifikasi klien menggunakan klien JScript®. Verifikasi tidak memerlukan komponen biner.
Meskipun standarisasi bahasa JScript dilakukan dengan baik, model objek dokumen (DOM) yang digunakan dalam dokumentasi HTML di browser (DOM) belum banyak digunakan standar. Oleh karena itu, verifikasi klien hanya dilakukan di Internet Explorer 4.0 dan versi yang lebih tinggi, karena objek yang diverifikasi adalah Internet Explorer DOM.
Dari perspektif server, verifikasi klien hanya berarti bahwa kontrol verifikasi mengirimkan konten yang berbeda ke HTML. Selain itu, urutan insiden persis sama. Pemeriksaan server -side masih dilakukan. Meskipun tampaknya 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 secara bersamaan, tetapi tidak ada fungsi verifikasi klien.
Tindakan pencegahan keselamatan. Beberapa orang dapat dengan mudah mendapatkan halaman yang berisi skrip, dan kemudian menonaktifkan atau mengubah halaman. Anda tidak boleh menggunakan skrip Anda untuk mencegah data yang buruk memasuki sistem Anda, tetapi hanya bagi pengguna untuk mendapatkan umpan balik yang lebih cepat. Oleh karena itu, jika Anda ingin menggunakan CustomValidator, Anda tidak boleh memberikan fungsi verifikasi klien tanpa fungsi verifikasi server yang sesuai.
Setiap kontrol verifikasi dapat memastikan bahwa blok skrip klien standar dikirim ke halaman. Faktanya, ini hanyalah sebagian kecil dari kode, yang berisi referensi ke kode dalam pustaka skrip WebUivalidation.js. File perpustakaan skrip ini berisi semua logika yang diverifikasi oleh klien.
Tentang Perpustakaan Script
Karena verifikasi skrip kontrol web ada di pustaka skrip, kode yang diverifikasi oleh semua klien tidak diperlukan untuk secara langsung mengirimkannya ke halaman, meskipun tampaknya dilakukan di permukaan. Referensi file skrip utama mirip dengan yang berikut:
<bahasa skrip = javascript
src =/_ aspx/1.0.9999/skrip/webuivalidation.js> </script>
Secara default, file skrip akan diinstal di direktori root default di direktori _aspx, dan menggunakan skrip termasuk instruksi untuk dipanggil, yang dimulai dengan garis diagonal positif. Referensi menunjukkan bahwa setiap objek individu tidak perlu memasukkan pustaka skrip, dan semua halaman di komputer yang sama dapat merujuk file yang sama. Anda akan melihat bahwa ada juga nomor versi bahasa publik 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 konten. Posisi file -file ini ditentukan dalam file config.web. File config.web adalah file XML untuk sebagian besar pengaturan ASP+. Berikut ini adalah definisi posisi dalam file ini:
<WebControls
ClientScriptSlocation =/_ aspx/{0}/skrip/
/>
Dorong Anda untuk membaca skrip sehingga Anda dapat memahami peristiwa yang terjadi secara mendalam. Namun, disarankan agar Anda tidak memodifikasi skrip ini, karena fungsinya terkait erat dengan versi runtime tertentu. Ketika versi diperbarui, skrip ini mungkin juga perlu diperbarui. Jika proyek tertentu harus diubah, cadangan terlebih dahulu skrip ini, dan kemudian arahkan proyek Anda ke file cadangan, metode ini adalah menggunakan file konfigurasi pribadi untuk mengganti posisi file -file ini. Jika string berisi instruksi format {0}, nomor versi akan menggantikan instruksi ketika nomor versi runtime akan diganti. Yang terbaik adalah mengubah posisi ini menjadi referensi relatif atau referensi absolut.
Nonaktifkan verifikasi klien
Terkadang Anda mungkin tidak ingin memverifikasi klien. Jika jumlah bidang input kecil, verifikasi klien mungkin tidak terlalu berguna. Lagi pula, Anda harus memiliki logika yang membutuhkan satu server putaran setiap saat. Anda akan menemukan bahwa informasi dinamis pada klien akan memiliki dampak negatif pada tata letak Anda.
Untuk menonaktifkan verifikasi klien, gunakan instruksi halaman clienttarget = downlevel. Instruksi ini mirip dengan awal file ASPX:
< %@halaman bahasa = C# clientTarget = downLevel %>
Nilai default dari instruksi ini adalah otomatis, menunjukkan bahwa Anda hanya memverifikasi klien Microsoft Internet Explorer 4.0 atau versi yang lebih tinggi.
Catatan: Sayangnya, dalam Beta 1, instruksi ini tidak hanya dinonaktifkan untuk verifikasi, dan pada saat yang sama, semua kontrol web menggunakan tag HTML 3.2 untuk diproses, yang mungkin memiliki 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 ketika halaman yang berisi verifikasi klien:
Saat memuat browser pada halaman, Anda perlu menginisialisasi setiap kontrol verifikasi. Kontrol ini dikirim sebagai tanda <span>, dan fitur HTML mereka paling dekat dengan fitur di server. Yang terpenting, semua elemen input yang dirujuk oleh perangkat verifikasi akan "digantung" saat ini. Elemen input yang direferensikan akan memodifikasi acara kliennya untuk memanggil rutin verifikasi saat memasuki perubahan.
Kode di pustaka skrip akan dieksekusi ketika pengguna menggunakan tombol tab untuk beralih di antara setiap bidang. Ketika bidang independen tertentu diubah, kondisi verifikasi akan dievaluasi kembali, dan perangkat verifikasi akan terlihat atau tidak terlihat sesuai kebutuhan.
Ketika pengguna mencoba mengirimkan formulir, semua verifikasi akan dievaluasi. Jika semua verifikasi ini efektif, formulir akan diserahkan ke server. Jika ada kesalahan di satu atau lebih tempat, situasi berikut akan terjadi:
Pengajuan dibatalkan. Formulir tidak dikirimkan ke server.
Semua verifikasi yang tidak valid terlihat.
Jika ringkasan verifikasi berisi showummary = true, semua kesalahan dari kontrol verifikasi akan dikumpulkan dan konten diperbarui dengan kesalahan ini.
Jika ringkasan verifikasi berisi showmessageBox = true, itu akan mengumpulkan kesalahan dan menampilkan kesalahan ini di kotak informasi klien.
Karena kontrol verifikasi klien dilakukan ketika kontrol verifikasi klien dilakukan pada setiap perubahan input atau saat mengirimkan, kontrol verifikasi ini biasanya dievaluasi dua kali atau lebih dari dua kali pada klien. Harap dicatat bahwa setelah pengiriman, kontrol verifikasi ini masih akan dievaluasi kembali di server.