ASP.NET MVC ValidateInput(كاذبة) توقف عن العمل مع xVal و [RegularExpression] DataAnnotation

StackOverflow https://stackoverflow.com/questions/1038102

سؤال

أود أن اعتراض "<"حرف في حقل النموذج من قبل regex المصادقة.سأذكر المشكلة في 3 خطوات:

الخطوة 1:عند محاولة إرسال نموذج مع حقل يتضمن "<"حرف أحصل على "يحتمل أن تكون خطرة طلب..." - كما هو متوقع في ASP.NET.

الخطوة 2:لتجنب ASP.NET's RequestValidation انا تزيين بلدي طريقة التحديث في وحدة تحكم مع "[ValidateInput(كاذبة)]".

أنه يعمل كما هو متوقع - الآن أستطيع أن ما بعد "<"حرف دون خطأ.

الخطوة 3:يمكنني استخدام xVal مع DataAnnotations.على سبيل المثال, [مطلوب] أو [StringLength(255)] يعمل كما هو متوقع.

ولكن عند استخدام:[RegularExpression("^[^<> ] * $ "،رسالة خطأ = "الأحرف الخاصة غير مسموح بها.")], أحصل على "يحتمل أن خطورة الطلب..." الخطأ مرة أخرى, بالرغم [ValidateInput(كاذبة)] التوجيه.

ماذا يحدث ؟ هل هناك طريقة أسهل للحصول على regex validaton ، ولكن مع [ValidateInput(كاذبة)] في المكان ؟ بالطبع أود أن يكون لي رمز التحقق من الصحة في هذا النموذج ، في وحدة تحكم.

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

المحلول

أي أنها مسألة في MVC 1 + xVal.في MVC 2 التحقق يعمل المفترض (و ليس هناك حاجة xVal بعد الآن) – Alex42

يبدو بوت تحافظ على دفع هذه واحدة إلى الأعلى لا يزال.هلا علامة الإجابة المقبولة بحيث يعلم ؟

نصائح أخرى

أنا باستخدام xVal & nhibernate.المصادقة و حاولت إعادة إنشاء هذا السلوك ولكن لأن المصادقة يرتبط في جانب العميل لم أستطع الحصول على قيمة من الماضي التحقق من جانب العميل.عندما تم تعطيل جافا سكريبت على جانب الملقم التحقق من صحة و تم القبض العادية التعبير المصادقة.

حاولت نفس الشيء مع استخدام البيانات الشروح التحقق من سمات نموذج الموثق و جعله الماضي.

يجب أن يكون هناك شيء آخر يحدث الذي تسبب في حدوث الخطأ.آسف أنا لا يمكن أن يكون أكثر فائدة!

محاولة التحقق من صحة باستخدام قاعدة بسيطة مع هذا الأسلوب.هذا على الأقل القضاء على xVal من المعادلة.إذا استمرت المشكلة بعد ذلك أقترح أن إما:

  • تنفيذ MVC الافتراضي نموذج الموثق
  • أو أن هناك مشكلة مع MVC المحرك في الإصدار الخاص بك باستخدام هذا بطريقة أو بأخرى مما يسمح استثناء إلى أن السمة التي يحددها التحقق من صحة < عند ذلك لا بد من حظر

إذا كان حقل, يمكنك فقط كتابة روتين للبحث عن شخصية '< أو >' وإزالته.يمكنك تحقيق ذلك من خلال الاستفادة من فرعية.نأمل أن يكون هذا وهذا يساعد

  • استخدام حلقة على طول النص إلى اختبار (for (int i=1 ، <= النص.طول ++))
  • تحقق من كل حرف ابتداء من 1 (هـ.ز ch = النص.substring(1)
  • إضافة كل قراءة حرف tmp سلسلة باستثناء '< أو >'

أعتقد أن أسلوب ثابت Escape() من شأنه أن يحل هذا بالنسبة لك.

  Regex r = new Regex(Regex.Escape(expression));

وضع هذا الخط في صفحة ويب.التكوين

<httpRuntime requestValidationMode="2.0" />

هذا هو تغيير في ASPNET 4.0

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