c# data - كيفية تحديد حد أدنى ولكن بدون عشري كحد أقصى باستخدام سمة توضيحية لبيانات النطاق؟





annotation in (9)


أود أن أضع decimal.MaxValue.ToString() لأن هذا هو السقف الفعال لنوع الأسطر فهو يكافئ عدم وجود حد أعلى.

أرغب في تحديد أن الحقل العشري للسعر يجب أن يكون> ​​= 0 ، لكنني لا أرغب حقًا في فرض قيمة قصوى.

هنا ما لدي حتى الآن ... لست متأكدا ما هي الطريقة الصحيحة للقيام بذلك.

[Range(typeof(decimal), "0", "??"] public decimal Price { get; set; }



يمكنك استخدام التحقق المخصص:

    [CustomValidation(typeof(ValidationMethods), "ValidateGreaterOrEqualToZero")]
    public int IntValue { get; set; }

    [CustomValidation(typeof(ValidationMethods), "ValidateGreaterOrEqualToZero")]
    public decimal DecValue { get; set; }

نوع طرق التحقق:

public class ValidationMethods
{
    public static ValidationResult ValidateGreaterOrEqualToZero(decimal value, ValidationContext context)
    {
        bool isValid = true;

        if (value < decimal.Zero)
        {
            isValid = false;
        }

        if (isValid)
        {
            return ValidationResult.Success;
        }
        else
        {
            return new ValidationResult(
                string.Format("The field {0} must be greater than or equal to 0.", context.MemberName),
                new List<string>() { context.MemberName });
        }
    }
}



يمكنك استخدام:

[Min(0)]

سيؤدي ذلك إلى فرض قيمة دنيا لا تقل عن 0 (صفر) ، ولا قيمة قصوى.

أنت بحاجة إلى DataAnnotationsExtensions لاستخدام هذا.




باستخدام المدى مع

[Range(typeof(Decimal), "0", "9999", ErrorMessage = "{0} must be a decimal/number between {1} and {2}.")]

[Range(typeof(Decimal),"0.0", "1000000000000000000"]

آمل أن يساعد




كنت سأجرب شيئًا كهذا:

[Range(typeof(decimal), ((double)0).ToString(), ((double)decimal.MaxValue).ToString(), ErrorMessage = "Amount must be greater than or equal to zero.")]

المشكلة مع القيام بذلك ، على الرغم من ذلك ، هو أن المحول البرمجي يريد تعبير ثابت ، والذي لا يسمح ((double)0).ToString() . سوف يأخذ المجمع

[Range(0d, (double)decimal.MaxValue, ErrorMessage = "Amount must be greater than zero.")]



إذا كنت تعمل مع الأسعار فأنا متأكد من أنك تستطيع أن تفترض بأمان أنه لن يكلف أكثر من تريليون دولار.

سأستخدم:

[Range(0.0, 1000000000000)]

أو إذا كنت بحاجة إليه فعلاً ، ما عليك سوى لصق قيمة Decimal.MaxValue (بدون الفواصل): 79،228،162،514،264،337،593،543،950،335

أي واحد من هؤلاء سوف يعمل بشكل جيد إذا لم تكن من زيمبابوي.




إذا كنت قلقًا بشأن السلسلة التي تبدو لطيفة ، فيمكنك إجراء ذلك:

    [Range(0, Double.PositiveInfinity)]

سيحتوي هذا على رسالة خطأ افتراضية من:

يجب أن يكون الحقل SuchAndSuch بين 0 و Infinity.




ماذا عن شيء مثل هذا:

[Range(0.0, Double.MaxValue)]

يجب أن يفعل ذلك ما تبحث عنه ويمكنك تجنب استخدام السلاسل.




AppDomain.CurrentDomain.BaseDirectory

يعمل مع MbUnit واجهة المستخدم الرسومية.





c# .net asp.net-mvc data-annotations