1. Acara
Ini adalah masalah yang sudah lama saya abaikan atau tidak saya temukan. Masalahnya adalah sebagai berikut:
Di halaman, ketika ada kontrol validasi, ketika kontrol Tombol memicu peristiwa OnClientClick, dan peristiwa ini mengembalikan nilai benar dan salah, kontrol validasi akan menjadi tidak valid dan tidak berfungsi lagi. Deskripsi spesifiknya adalah sebagai berikut:
Halaman .Net adalah sebagai berikut:
Copy kode kodenya sebagai berikut:
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:Manajer Skrip>
<div>
<asp:TextBox ID="TextBoxTest" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="TextBoxTest"
ErrorMessage="Tidak boleh kosong" Display="Tidak Ada"></asp:RequiredFieldValidator><ajaxToolkit:ValidatorCalloutExtender
ID="ValidatorCalloutExtender1" TargetControlID="RequiredFieldValidator1" runat="server">
</ajaxToolkit:ValidatorCalloutExtender>
<asp:Button ID="ButtonText" runat="server" Text="Test" OnClientClick="return konfirmasi('Apakah Anda yakin ingin mengirimkan?');" />
</div>
</bentuk>
Seperti di atas, tambahkan kontrol validasi RequireFieldValidator ke halaman sehingga nilai TextBoxTest tidak boleh kosong. Saat ButtonText mengirimkan halaman, pengguna diminta untuk mengonfirmasi apakah halaman perlu dikirimkan. Ini halaman yang sangat sederhana dan sepertinya tidak ada masalah. Namun ketika nilai TextBoxTest kosong, kontrol validasi tidak berfungsi dan halaman berhasil dikirimkan. Apa alasannya?
2. Merespon peristiwa
Apa yang terjadi? Pertama, setelah saya menghapus acara OnClientClick dari ButtonTest, kontrol verifikasi berfungsi. Mengapa ini? Saya memeriksa kode sumber halaman dan menemukan bahwa kontrol ButtonTest menghasilkan kode sumber berikut:
<input type="submit" name="ButtonText" value="Test" onclick="javascript:WebForm_DoPostBackWithOptions(WebForm_PostBackOptions(ButtonText, , true, , , false, false))" id="ButtonText" />
Seperti yang dapat dilihat dari baris kode sumber ini, kontrol validasi menghasilkan sepotong kode javascript di sisi klien untuk memverifikasi apakah nilai di TextBox kosong. Setelah saya menambahkan OnClientClick ButtonTest, saya memeriksa kembali kode sumbernya. Kode sumber yang dihasilkan oleh kontrol ButtonTest adalah sebagai berikut:
<input type="submit" name="ButtonText" value="Test" onclick="return konfirmasi('Apakah Anda yakin ingin mengirimkan?');WebForm_DoPostBackWithOptions(WebForm_PostBackOptions baru(ButtonText, , benar, , salah, salah )) " id="TombolTeks" />
Dari baris kode ini, Anda dapat dengan jelas melihat di mana letak masalahnya. Di sisi klien, javascript khusus dijalankan terlebih dahulu, dan kemudian javascript yang dihasilkan oleh kontrol validasi dijalankan ada artinya.
3. Kontrol respons
Setelah Anda mengetahui di mana masalahnya, akan lebih mudah untuk menyelesaikannya. Solusi saya adalah: sebelum menjalankan javascript khusus (kembalikan konfirmasi('Apakah Anda yakin ingin mengirimkan?'), verifikasi apakah kontrol pada halaman mematuhi dengan aturan. , jadi saya memodifikasi acara OnClientClick dari ButtonTest sebagai berikut:
Copy kode kodenya sebagai berikut:
<asp:Button ID="ButtonText" runat="server" Text="Test" OnClientClick="if(CheckClientValidate()) return Konfirmasi('Apakah Anda yakin ingin mengirimkan halaman?');" />
Kode metode CheckClientValidate() adalah sebagai berikut:
Copy kode kodenya sebagai berikut:
<skrip bahasa="javascript" type="teks/javascript">
fungsi CheckClientValidate(){
Page_ClientValidate();
jika (Halaman_ApakahValid){
kembali benar;
}kalau tidak{
kembali salah;
}
}
</skrip>
Jalankan, uji. Kontrol validasi berfungsi. Masalah terpecahkan.
4. Catatan tambahan
Ini adalah masalah dan solusi yang saya abaikan. Ketika saya menemukan masalah ini, saya berkeringat dingin. Untungnya, saya melakukan verifikasi sisi server yang ketat, jika tidak maka akan sangat menyedihkan. Dari sini kita juga dapat melihat betapa pentingnya menentukan verifikasi sisi server yang ketat :-). Ini tidak hanya mencegah "peretas" melewati verifikasi klien, tetapi juga mencegah ketidakakuratan data yang disebabkan oleh kesalahan yang tidak disadari oleh diri sendiri.
Catatan:
Page_ClientValidate(), fungsi ini digunakan di halaman aspx yang berisi kontrol validasi Microsoft untuk mengembalikan Benar atau Salah berdasarkan apakah operasi input pengguna sah.
Bisa dinilai secara langsung.
Copy kode kodenya sebagai berikut:
jika(Page_ClientValidate())
{
kembali benar;
}
kalau tidak
{
kembali salah;
}