سؤال

سيتم تشغيل رمز .NET 3.5 التالي، وضعت في ملف ASPX، خطأ JavaScript عند تحميل الصفحة (للمستخدمين الذين لديهم جافا سكريبت):

<noscript>
    <asp:TextBox ID="txt" runat="server"></asp:TextBox>
    <asp:RequiredFieldValidator ID="txt_RequiredFieldValidator" runat="server" 
      ControlToValidate="txt"></asp:RequiredFieldValidator>
    <asp:Button ID="btn" runat="server" Text="Button" />
</noscript>

يحدث الخطأ لأن JavaScript الناتج عن عنصر تحكم ASP.NET Validator لا يحتوي على فحص NULL قبل سطر التعليمات البرمجية الثاني أدناه:

var ctl00_body_txt_RequiredFieldValidator =
  document.all ?
    document.all["ctl00_body_txt_RequiredFieldValidator"] :
    document.getElementById("ctl00_body_txt_RequiredFieldValidator");

ctl00_body_txt_RequiredFieldValidator.controltovalidate = "ctl00_body_txt";

هل يمكن لأي شخص أن يقترح حلا على هذا؟


هامش: لماذا افعل هذا؟ بالنسبة لمستخدمي غير جافا سكريبت، أنا أستبدل بعض وظائف AJAX مع بعض مكونات UI مختلفة، والتي تحتاج إلى التحقق من الصحة.

هل كانت مفيدة؟

المحلول

يجب عليك إضافة ما يلي إلى FiltValidator:

enableclientscript="false"

رؤية كما كنت تستخدم هذه فيu003Cnoscript style=";text-align:right;direction:rtl"> العلامات، لا توجد نقطة في توفير الألياف الجانبية العميلة لعناصر التحكم - فهي سيعرض فقط إذا تم إيقاف تشغيل JS.

سيؤدي ذلك إلى إجبار التحقق من الصحة (تلقائيا) على جانب الخادم لك.

فقط تأكد من الاتصال "صفحة"قبل معالجة الاستجابة.

يرى basevalidator.enableclientcript. لمزيد من التفاصيل.

نصائح أخرى

يبحث JavaScript عن عنصر الوارد في الأرقيم؟ AFAIK لا توجد طريقة نظيفة للكشف عن دعم البرنامج النصي من جانب الخادم.

أعتقد أنك ستحتاج إلى البناء في إعادة توجيه (لقد رأيت هذا تم تحديثه من خلال Meta-Refresp في رأس رقمي إذا كنت لا تمانع في فشل التحقق من الصحة) لدفع المستخدمين الأرقام إلى "يرجى تاجر TurnScript على الصفحة" أو قم بتنفيذ بعض الجراحة لتخفيف ملزمة التحقق من الصحة / التحكم التي قد تتخذ كمية من إعادة اختراع العجلات. هذه هي واحدة من تلك المجالات التي يكون فيها اقتران ASP.NET ضيق بين وحدة التحكم وعنه حقا يعاقب حقا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top