كيفية القيام بالتحقق من صحة نموذج عدد صحيح في ASP.NET MVC 2
-
30-09-2019 - |
سؤال
لدي نموذج تسجيل ويجب على المستخدم إدخال لقطات مربعة لمنزلهم. أود أن تكون هذه القيمة عددًا صحيحًا. هل هناك طريقة للتحقق من صحة هذه القيمة باستخدام السمات ASP.NET MVC؟
المحلول
نعم ، إنه كذلك ، ولكن سيتعين عليك إنشاء نسخة مسطحة من الكائن الذي ترغب في إنشاؤه ، لأن التحقق من صحة السمات يتم تشغيله فقط بعد أن قام MVC بتحويل بياناتك إلى النموذج. والتي ، عندما تكون قيمتك INT ، ستفشل في التحقق من صحة ما إذا لم يدخل المستخدم INT ، وستحصل على رسالة خطأ MVC في وضع خاطئك.
هل يمكنك نشر الكائن الذي تريد صنعه؟
مع إصدار مسطح أعني أن جميع أطراف البيانات و ints هي لسعات في الإصدار المسطح.
ثم أستخدم هذا:
[DisplayName("Square meters")]
[PosNumberNoZero(ErrorMessage = "need a positive number, bigger than 0")]
public string squaremeters { get; set; }
في نفس الملف
public class PosNumberNoZeroAttribute : ValidationAttribute {
public override bool IsValid(object value) {
if (value == null) {
return true;
}
int getal;
if (int.TryParse(value.ToString(), out getal)) {
if (getal == 0)
return false;
if (getal > 0)
return true;
}
return false;
}
}
إذا كانت ModelState صالحة ، فأنا أستخدم Automapper لتحويل نموذج FlatModel إلى طرازتي ، وهو مجرد سطرين من التعليمات البرمجية.
تحرير: إذا كان 0 هو رقم صالح:
public class PosNumberAttribute : ValidationAttribute {
public override bool IsValid(object value) {
if (value == null) {
return true;
}
int getal;
if (int.TryParse(value.ToString(), out getal)) {
if (getal >= 0)
return true;
}
return false;
}
}
نصائح أخرى
أدرك أن هذا قد تمت الإجابة عليه بالفعل ، لكن إجابة ستيفانفدز معقدة غير معقدة. ما عليك سوى استخدام سمات التحقق من صحة MVCs:
[DisplayName("Square Feet")]
[Required(ErrorMessage = "Square Feet is Required")]
[Range(0, int.MaxValue, ErrorMessage = "Square Feet must be a positive number")]
public int SquareFeet { get; set; }
عادة ما أستخدم سمة النطاق مثل هذا:
إيجابية:
[Range(0,int.MaxValue)]
public int Id { get; set; }
INT السلبي:
[Range(int.MinValue,-1)]
public int Id { get; set; }
أي int:
[Range(int.MinValue,int.MaxValue)]
public int Id { get; set; }
حسنا باستخدام Range
ل int
لن يعمل الحقل إذا كان لديك بعض الرسائل مثل "A".
الخطأ Handler
لا يسمى (ASP.NET CORE 1.0 RC2).