التحقق من العميل
إذا تم تمكين صفحتك عن مصادقة العميل ، فسيحدث تسلسل مختلف تمامًا للأحداث خلال الرحلة ذهابًا وإيابًا. يتم تنفيذ مصادقة العميل باستخدام Client JScript®. لا يلزم أي مكونات ثنائية لتنفيذ هذا التحقق.
على الرغم من أن لغة JScript موحدة جيدًا ، إلا أنه لا يوجد معيار معتمد على نطاق واسع لنموذج كائن المستند (DOM) المستخدم للتفاعل مع مستندات HTML في المتصفح. لذلك ، يتم تنفيذ مصادقة العميل فقط في Internet Explorer 4.0 وبعد ذلك لأن كائن المصادقة هو Internet Explorer DOM.
من منظور الخادم ، يعني التحقق من العميل فقط أن عنصر التحكم في التحقق يرسل محتوى مختلفًا إلى HTML. بخلاف ذلك ، تسلسل الحدث هو نفسه بالضبط. لا يزال يتم تنفيذ فحص جانب الخادم. على الرغم من أنها قد تبدو زائدة عن الحاجة ، إلا أنها مهمة للغاية لأن:
قد لا تدعم بعض عناصر التحكم في التحقق البرامج النصية للعميل. هناك مثال جيد: إذا كنت تريد استخدام كل من وظائف التحقق من CustomValidator و Server ، ولكن لا توجد وظيفة التحقق من العميل.
احتياطات السلامة. يمكن لبعض الأشخاص الحصول على صفحة بسهولة مع البرامج النصية ومن ثم تعطيل أو تغيير تلك الصفحة. يجب ألا تستخدم البرامج النصية لمنع إدخال البيانات السيئة من إدخال نظامك ، ولكن فقط للحصول على ملاحظات أسرع من المستخدمين. لذلك ، إذا كنت ترغب في استخدام CustomValIdator ، فيجب ألا تقدم وظيفة التحقق من العميل بدون وظيفة التحقق من الخادم المقابلة.
يضمن كل عنصر تحكم التحقق في إرسال كتلة البرنامج النصي العميل القياسية إلى الصفحة. في الواقع ، هذا مجرد جزء صغير من الكود الذي يحتوي على إشارات إلى الكود في مكتبة البرنامج النصي webuivalidation.js. يحتوي ملف مكتبة البرنامج النصي على جميع المنطق للتحقق من العميل.
حول مكتبة السيناريو
نظرًا لأن البرنامج النصي للتحكم في الويب في مكتبة البرنامج النصي ، فليس من الضروري إرسال جميع التعليمات البرمجية التي تم تحديدها مباشرة إلى الصفحة ، على الرغم من أنه يبدو أنه يقوم بذلك على السطح. تبدو مراجع ملف البرنامج النصي الرئيسي هكذا:
<script language = "JavaScript"
src = "/_ ASPX/1.0.9999/script/webuivalidation.js"> </script>
افتراضيًا ، يتم تثبيت ملف البرنامج النصي في دليل الجذر الافتراضي في دليل "_aspx" ويتم استدعاؤه مع البرنامج النصي التجريبي الذي يتضمن التوجيه ، والذي يبدأ بقطع الأمان. يشير هذا المرجع إلى أن كل كائن فردي لا يجب أن يحتوي على مكتبة نصية ، ويمكن لجميع الصفحات على نفس الكمبيوتر الرجوع إلى نفس الملف. ستلاحظ أن هناك أيضًا رقم إصدار وقت تشغيل اللغة الشائع في هذا المسار بحيث يمكن تشغيل إصدارات وقت التشغيل المختلفة على نفس الكمبيوتر.
إذا نظرت إلى دليل الجذر الافتراضي الخاص بك ، فستجد الملف وعرض محتوياته. يتم تحديد موقع هذه الملفات في ملف config.web. ملف config.web هو ملف XML لمعظم إعدادات ASP+. فيما يلي تعريف الموقع في الملف:
<WebControls
clientscriptslocation = "/_ aspx/{0}/script/"
/>
نشجعك على قراءة البرنامج النصي لاكتساب نظرة ثاقبة على ما حدث. ومع ذلك ، يوصى بعدم تعديل هذه البرامج النصية ، لأن وظيفتها مرتبطة ارتباطًا وثيقًا بإصدارات وقت تشغيل محددة. عند تحديث إصدار وقت التشغيل ، قد تتطلب هذه البرامج النصية أيضًا تحديثات مقابلة ، وسوف تتخلى عن التغييرات أو تواجه المشكلة التي لا يعمل البرنامج النصي. إذا كان يجب على مشروع معين تغيير هذه البرامج النصية ، فقم بإجراء نسخ احتياطية من البرامج النصية أولاً ثم قم بإشارة مشروعك إلى ملف النسخ الاحتياطي عن طريق استبدال موقع هذه الملفات بملف config.web خاص. إذا كانت السلسلة تحتوي على تعليمة التنسيق "{0}" ، فسيقوم رقم إصدار وقت التشغيل باستبدال التعليمات. من الأفضل تغيير هذا الموقع إلى مرجع نسبي أو مطلق.
تعطيل مصادقة العميل
في بعض الأحيان قد لا تريد مصادقة العميل. إذا كان عدد حقول الإدخال صغيرة ، فقد يكون التحقق من العميل مفيدًا. بعد كل شيء ، يجب أن يكون لديك منطق يحتاج إلى السفر من وإلى الخادم مرة واحدة في كل مرة. ستجد أن المعلومات التي تظهر ديناميكيًا على العميل سيكون لها تأثير سلبي على التصميم.
لتعطيل مصادقة العميل ، استخدم توجيه الصفحة "ClientTarget = downlevel". يشبه هذا التوجيه بداية ملف ASPX التالي:
<٪@ page language = "c#" clientTarget = downlevel ٪>
القيمة الافتراضية لهذا التوجيه هي "Auto" ، مما يعني أنك لا تؤدي سوى مصادقة العميل لـ Microsoft Internet Explorer 4.0 أو أحدث.
ملاحظة: لسوء الحظ ، في بيتا 1 ، لا يؤدي هذا التوجيه ببساطة إلى تعطيل التحقق ، ولكنه يؤدي أيضًا إلى معالجة جميع عناصر التحكم في الويب باستخدام علامات HTML 3.2 ، والتي يمكن أن تنتج نتائج غير متوقعة. توفر النسخة النهائية طريقة أفضل للتحكم في هذه المشكلة.
تسلسل حدث العميل
هذا التسلسل عبارة عن سلسلة من الأحداث التي تحدث عند تشغيل صفحة تحتوي على التحقق من صحة العميل:
عندما يتم تحميل الصفحة في المتصفح ، يجب تهيئة كل عنصر تحكم التحقق في وقت ما. يتم إرسال عناصر التحكم هذه كعلامات <span> ، وسمات HTML الخاصة بها الأقرب إلى تلك الموجودة على الخادم. الأهم من ذلك ، يتم "تثبيت جميع عناصر الإدخال المشار إليها من قبل المدقق في هذا الوقت. سيعدل عنصر الإدخال المشار إليه أحداث عميله بحيث يتم استدعاء روتين التحقق في كل مرة يتغير فيها الإدخال.
سيتم تنفيذ الكود في مكتبة البرنامج النصي عندما يتحول المستخدم بين الحقول باستخدام مفتاح TAB. عندما يتغير حقل منفصل ، يتم إعادة تقييم حالة التحقق ، مما يجعل المدقق مرئيًا أو غير مرئي حسب الحاجة.
عندما يحاول المستخدم إرسال نموذج ، يتم إعادة تقييم جميع المدققين. إذا كانت كل هذه المدققات صالحة ، فسيتم إرسال النموذج إلى الخادم. إذا كان هناك خطأ واحد أو أكثر ، فسيحدث المواقف التالية:
تم إلغاء التقديم. لا يتم تقديم النموذج إلى الخادم.
جميع أغلبيات الصقور غير صالحة مرئية.
إذا كان ملخص التحقق يحتوي على Dowsummary = صحيح ، يتم جمع جميع الأخطاء من التحكم في التحقق ويتم تحديث محتوياتها بهذه الأخطاء.
إذا كان ملخص التحقق يحتوي على ShowMessageBox = صحيح ، يتم جمع الأخطاء وعرضها في مربع معلومات العميل.
نظرًا لأن عناصر التحكم في التحقق من العميل يتم تنفيذها في كل مرة يتم فيها إدخال التغيير أو إرساله ، يتم تقييم عناصر التحكم في التحقق هذه عادةً على العميل مرتين أو أكثر. يرجى ملاحظة أنه بعد التقديم ، ستظل أدوات التحكم في التحقق هذه على الخادم.
واجهة برمجة تطبيقات العميل
هناك واجهة برمجة تطبيقات صغيرة يمكن استخدامها على جهاز العميل لتحقيق تأثيرات مختلفة في رمز العميل الخاص بك. نظرًا لأنه لا يمكن إخفاء بعض الروتين ، من الناحية النظرية ، يمكنك الاستفادة من العميل للتحقق من جميع المتغيرات والميزات والوظائف المحددة بواسطة البرنامج النصي. ومع ذلك ، فإن العديد من هذه تفاصيل التنفيذ التي يمكن تغييرها. ما يلي يلخص كائنات العميل التي نشجعك على استخدامها.
الجدول 3. كائنات العميل
وصف نوع الاسم
يشير المتغير المنطقي page_isvalid إلى ما إذا كانت الصفحة صالحة حاليًا. يبقى البرنامج النصي للتحقق دائمًا المتغير حتى الآن.
Page_validators element Array هذه مجموعة تحتوي على جميع المدققين في الصفحة.
يشير المتغير المنطقي Page_ValidationActive إلى ما إذا كان ينبغي إجراء التحقق. يمكن إيقاف تشغيل هذا المتغير إلى FALSE عن طريق البرمجة.
خاصية iSvalid Boolean لكل صحة العميل هذه الخاصية تشير إلى ما إذا كان المدقق صالحًا حاليًا. لاحظ أنه في إصدار PDC ، يتم خلط هذه الخاصية مع العلبة العلوية والسفلية ("Isvalid").
تجاوز مصادقة العميل
تتمثل إحدى المهام التي تحتاجها في كثير من الأحيان في إضافة زر إلغاء أو زر التنقل في الصفحة. في هذه الحالة ، قد ترغب في إرسال الصفحة باستخدام الزر ، حتى لو كان هناك خطأ في الصفحة. نظرًا لأن حدث زر العميل "OnClick" يحدث قبل حدث "OnSubmit" للنموذج ، فقد يتجنب إرسال الشيكات وتجاوز التحقق. يصف ما يلي كيفية إكمال المهمة باستخدام التحكم في صورة HTML كزر إلغاء:
<نوع الإدخال = صورة الصورة = الخادم
القيمة = "إلغاء"
onServerClick = cmdcancel_click>
إن تنفيذ هذه المهمة باستخدام الزر أو التحكم في ImageButton سيؤدي إلى بعض الالتباس لأنه من المفترض أن يكون حدث "onclick" حدثًا من جانب الخادم مع نفس الاسم. يجب عليك تعيين الحدث في البرنامج النصي العميل:
<ASP: ImageButton Runat = Server ID = CMDimgCancel
AlternateText = "إلغاء"
onClick = cmdcancel_click/>
<script language = "javaScript">
document.all ["cmdimgcancel"]. onClick =
وظيفة جديدة ("page_validationActive = false ؛") ؛
</script>
هناك طريقة أخرى لحل هذه المشكلة وهي تعيين زر الإلغاء بحيث لا يؤدي إلى حدوث حدث الالتزام في البرنامج النصي للعميل عند عودته. هي أدوات التحكم في HTMLINPUTBUTTON و LINKBUTTON أمثلة على ذلك.
المؤثرات الخاصة
هناك متطلبات شائعة أخرى وهي أنه في حالة وجود خطأ ، بالإضافة إلى رسالة الخطأ التي يعرضها المدقق نفسه ، هناك تأثيرات أخرى مطلوبة. في هذه الحالة ، يجب إجراء أي تعديلات تقوم بها في وقت واحد على الخادم أو العميل. لنفترض أنك بحاجة إلى إضافة ملصق لتغيير اللون اعتمادًا على ما إذا كان الإدخال صالحًا أم لا. فيما يلي كيفية تنفيذ هذه المهمة على الخادم:
الطبقة العامة changeColorpage: صفحة {
العلامة العامة lblzip ؛
Regularexpressionvalidator Valzip ؛
التجاوز المحمي void onload (eventArgs e) {
lblzip.forecolor = valzip.isvalid؟
}
}
جميع الطرق المذكورة أعلاه مثالية ، ولكن طالما قمت بتعديل التحقق كما هو مذكور أعلاه ، ستجد أنه ما لم تفعل الشيء نفسه على العميل ، فسيبدو غير متسق للغاية. سيمنعك إطار التحقق من العديد من هذه التأثيرات المزدوجة ، ولكن لا يمكنه تجنب الآثار الأخرى التي يجب عليك تحقيقها في وقت واحد على كل من العميل والخادم. فيما يلي مقتطف لأداء نفس المهمة على العميل:
<ASP: معرف التسمية = lblzip runat = الخادم
text = "الرمز البريدي:"/>
<asp: textbox id = txtzip runat = server
/> </asp: textbox> <br>
<asp: regularexpressionvalidator id = valzip runat = server
ControlTovalidate = txtzip
errormessage = "رمز بريدي غير صالح"
ValidationExpression = "[0-9] {5}" /> <br>
<لغة البرنامج النصي = javaScript>
وظيفة txtziponchange () {
// إذا كانت مصادقة العميل غير نشطة ، فلن يتم تنفيذ أي إجراء
if (typeof (page_validators) == "غير محدد") إرجاع ؛
// تغيير لون الملصق
lblzip.style.color = valzip.isvalid؟
}
</script>
BETA 1 API Client API
بالنسبة إلى الإصدار التجريبي 1 ، يمكن أن تسبب بعض الوظائف التي يمكن استدعاؤها من برامج النصوص العميل مواقف أخرى.
الجدول 4. وظائف تسمى من البرامج النصية العميل
وصف الاسم
يأخذ ValitatorValidate (VAL) مدقق العميل كمدخل. اجعل المدقق تحقق من إدخاله وتحديث شاشة العرض الخاصة به.
يحصل Valitatorenable (VAL ، Enable) على مدقق العميل وقيمة منطقية. تمكين أو تعطيل التحقق من العميل. إذا تم تعطيله ، فلن يتم تقييم مدقق العميل وسيظهر مدقق العميل دائمًا على أنه صالح.
يحصل ValitatorHookupControl (التحكم ، VAL) على عنصر HTML الإدخال ومقحة العميل. تعديل أو إنشاء حدث تغيير لهذا العنصر بحيث يتم تحديث المدقق عند تغييره. هذه الوظيفة مناسبة للمقابلات المخصصة بناءً على قيم إدخال متعددة.
غرضه الخاص هو تمكين أو تعطيل المدقق. إذا كنت تريد أن يكون التحقق فعالًا فقط في موقف معين ، فقد تحتاج إلى تغيير حالة التنشيط على كل من الخادم والعميل ، وإلا ستجد أنه لا يمكن للمستخدم إرسال الصفحة.
فيما يلي المثال أعلاه بالإضافة إلى حقل يتم التحقق منه فقط عند عدم تحديد خانة الاختيار.
الطبقة العامة الشرطية: صفحة {
HtmlinputCheckbox العام ؛
Public ItevieFieldValidator rfvalshipaddress ؛
Void Void Void محمية محمية () {
bool enableShip =! chksameas.checked ؛
rfvalshipaddress.endabled = enableShip ؛
base.validate () ؛
}
}
هنا هو الرمز المكافئ للعميل:
<نوع الإدخال = مربع الاختيار runat = معرف الخادم = chksameas
> مثل عنوان الدفع <br>
<لغة البرنامج النصي = javaScript>
وظيفة onchangesameas () {
var enableShip =! event.srcelement.status ؛
READATIRENABLE (rfvalshipaddress ، enableship) ؛
}
</script>