كيفية القيام بالتحقق من صحة نموذج عدد صحيح في ASP.NET MVC 2

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

سؤال

لدي نموذج تسجيل ويجب على المستخدم إدخال لقطات مربعة لمنزلهم. أود أن تكون هذه القيمة عددًا صحيحًا. هل هناك طريقة للتحقق من صحة هذه القيمة باستخدام السمات 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).

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