فشل التحقق من صحة النموذج ASP.NET MVC 2
-
02-10-2019 - |
سؤال
لدي الممتلكات التالية في فئة بيانات التعريف النموذجية الخاصة بي:
[Required(ErrorMessage = "Spent On is required")]
[RegularExpression(@"[0-1][0-9]/[0-3][0-9]/20[12][0-9]",
ErrorMessage = "Please enter date in mm/dd/yyyy format")]
[DataType(DataType.Date)]
[DisplayName("Spent On")]
public DateTime SpentOn { get; set; }
لكن كلما اتصلت ModelState.IsValid
إنها تُرجع دائمًا كاذبة لأن Regex لا يتحقق من التحقق منه. لقد تطابق تاريخ الإدخال (08/29/2010) مقابل Regex الجديد باستخدام نفس النمط ويتطابق تمامًا.
ما الخطأ الذي افعله؟
المحلول
ذلك لأن Regex ينطبق على الأوتار وليس DateTime
الخصائص. إذا دخل المستخدم إلى سلسلة غير صالحة لا يمكن تحليلها إلى DateTime
مثيل من موثق النموذج ، سيضيف رسالة خطأ عام قبل تنفيذ نمط regex.
لديك بعض الاحتمالات:
- تخصيص رسالة الخطأ في ملف الموارد
- اكتب موثق نموذج مخصص
- استخدم خاصية سلسلة (أشعر بالذنب لاقتراح هذا :-))
نصائح أخرى
الفعلي هناك حل آخر لهذا الغرض. يمكنك ببساطة التصنيف الفرعي لـ regularexpressionattribute
public class DateFormatValidatorAttribute : RegularExpressionAttribute {
public DateFormatValidatorAttribute()
: base(@"[0-1][0-9]/[0-3][0-9]/20[12][0-9]")
{
ErrorMessage = "Please enter date in mm/dd/yyyy format";
}
public override bool IsValid(object value) {
return true;
}
}
في global.asax.cs عند التطبيق ، قم بتسجيل addapter regularexpression للتحقق من صحة من جانب العميل مثل:
DataAnnotationsModelValidatorProvider.RegisterAdapter(
typeof(DateFormatValidatorAttribute),
typeof(RegularExpressionAttributeAdapter));
الآن يمكنك الحصول على جانب عميل مصادقة مصلحة الإصابة ببناء MVC والحفاظ على DateTime كنوع الخاص بك