1. الحدث
هذه مشكلة تجاهلتها أو لم أكتشفها منذ فترة طويلة والمشكلة هي كما يلي:
في الصفحة، عندما يكون هناك عنصر تحكم في التحقق من الصحة، وعندما يقوم عنصر التحكم في الزر بتشغيل حدث OnClientClick، ويقوم هذا الحدث بإرجاع صواب وخطأ، فإن عنصر تحكم التحقق من الصحة سيصبح غير صالح ولن يعمل بعد الآن. الوصف المحدد هو كما يلي:
صفحة .Net هي كما يلي:
انسخ رمز الكود كما يلي:
<معرف النموذج = "form1" runat = "الخادم">
<asp:ScriptManager ID = "ScriptManager1" runat = "الخادم">
</asp:ScriptManager>
<ديف>
<asp:TextBox ID="TextBoxTest" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID = "RequiredFieldValidator1" runat = "الخادم" ControlToValidate = "TextBoxTest"
ErrorMessage="لا يمكن أن يكون فارغاً" Display="لا شيء"></asp:RequiredFieldValidator><ajaxToolkit:ValidatorCalloutExtender
المعرف = "ValidatorCalloutExtender1" TargetControlID = "RequiredFieldValidator1" runat = "الخادم">
</ajaxToolkit:ValidatorCalloutExtender>
<asp:Button ID = "ButtonText" runat = "server" Text = "Test" OnClientClick = "return تأكيد ('هل أنت متأكد من أنك تريد الإرسال؟')؛"
</div>
</النموذج>
كما هو مذكور أعلاه، قم بإضافة عنصر تحكم التحقق من صحة RequireFieldValidator إلى الصفحة بحيث لا يمكن أن تكون قيمة TextBoxTest فارغة عندما يرسل ButtonText الصفحة، يُطلب من المستخدم تأكيد ما إذا كان يجب إرسالها أم لا. إنها صفحة بسيطة للغاية ويبدو أنها لا تحتوي على أي مشاكل. ولكن عندما تكون قيمة TextBoxTest فارغة، لا يعمل عنصر التحكم في التحقق من الصحة ويتم إرسال الصفحة بنجاح. ما هو سبب هذا؟
2. الرد على الأحداث
ماذا يحدث هنا؟ أولاً، بعد أن قمت بإزالة حدث OnClientClick الخاص بـ ButtonTest، نجح التحكم في التحقق. لماذا هذا؟ لقد قمت بفحص الكود المصدري للصفحة ووجدت أن عنصر التحكم ButtonTest ينشئ كود المصدر التالي:
<input type = "submit" name = "ButtonText" value = "Test" onclick = "javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(ButtonText, , true, , , false, false))" id="ButtonText" />
كما يتبين من هذا السطر من التعليمات البرمجية المصدر، يقوم عنصر التحكم في التحقق من الصحة بإنشاء جزء من تعليمات برمجية جافا سكريبت على جانب العميل للتحقق مما إذا كانت القيمة الموجودة في TextBox فارغة. بعد أن قمت بإضافة OnClientClick الخاص بـ ButtonTest، قمت بإعادة عرض الكود المصدري. الكود المصدري الذي تم إنشاؤه بواسطة عنصر التحكم ButtonTest هو كما يلي:
<input type = "submit" name = "ButtonText" value = "Test" onclick = "return تأكيد ('هل أنت متأكد من أنك تريد الإرسال؟')؛ WebForm_DoPostBackWithOptions (new WebForm_PostBackOptions (ButtonText، ، true،،، false، false )) " id="ButtonText" />
من هذا السطر من التعليمات البرمجية، يمكنك أن ترى بوضوح أين تكمن المشكلة، من جانب العميل، يتم تنفيذ جافا سكريبت المخصص أولاً، ثم يتم تنفيذ جافا سكريبت الناتج عن عنصر التحكم في التحقق من الصحة أي معنى.
3. ضوابط الاستجابة
بمجرد معرفة مكان المشكلة، سيكون حلها أسهل: قبل تنفيذ جافا سكريبت المخصص (قم بإرجاع التأكيد ("هل أنت متأكد من أنك تريد الإرسال؟")، تحقق مما إذا كانت عناصر التحكم الموجودة على الصفحة تتوافق مع القواعد، لذلك قمت بتعديل حدث OnClientClick الخاص بـ ButtonTest كما يلي:
انسخ رمز الكود كما يلي:
<asp:Button ID="ButtonText" runat="server" Text="Test" OnClientClick="if(CheckClientValidate()) return Confirm('هل أنت متأكد من أنك تريد إرسال الصفحة؟');" />
رمز طريقة CheckClientValidate() كما يلي:
انسخ رمز الكود كما يلي:
<script language="javascript" type="text/javascript">
الدالة CheckClientValidate(){
Page_ClientValidate();
إذا (Page_IsValid){
عودة صحيحة؛
}آخر{
عودة كاذبة.
}
}
</script>
تشغيل، اختبار. تعمل ضوابط التحقق من الصحة. تم حل المشكلة.
4. حاشية
هذه هي المشكلة والحل الذي كنت أعرف أنني يجب أن أتجاهله. عندما اكتشفت هذه المشكلة، شعرت بالعرق البارد، ولحسن الحظ، قمت بإجراء تحقق صارم من جانب الخادم، وإلا فسيكون الأمر بائسًا. من هنا يمكننا أيضًا أن نرى مدى ضرورة تحديد التحقق الصارم من جانب الخادم :-). فهو لا يمنع "المتسللين" من تجاوز التحقق من العميل فحسب، بل يمنع أيضًا عدم دقة البيانات الناتجة عن الأخطاء التي لا يلاحظها الشخص بنفسه.
ملحوظة:
Page_ClientValidate()، يتم استخدام هذه الوظيفة في صفحات aspx التي تحتوي على عناصر تحكم التحقق من صحة Microsoft لإرجاع True أو False بناءً على ما إذا كانت عملية إدخال المستخدم قانونية.
يمكن الحكم عليه مباشرة.
انسخ رمز الكود كما يلي:
إذا (Page_ClientValidate())
{
عودة صحيحة؛
}
آخر
{
عودة كاذبة.
}