Programing

범위 데이터 주석 속성을 사용하여 최소이지만 최대 소수는 지정하지 않는 방법은 무엇입니까?

lottogame 2020. 6. 28. 18:29
반응형

범위 데이터 주석 속성을 사용하여 최소이지만 최대 소수는 지정하지 않는 방법은 무엇입니까?


가격의 10 진수 필드가 0보다 크거나 같아야한다고 지정하고 싶지만 실제로 최대 값을 부과하고 싶지 않습니다.

여기까지 내가 가진 것이 있습니다 ...이 올바른 방법이 무엇인지 잘 모르겠습니다.

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

이런 식으로 어떻습니까 :

[Range(0.0, Double.MaxValue)]

그것은 당신이 찾고있는 것을해야하며 문자열 사용을 피할 수 있습니다.


문자열이 멋지게 보이는 것에 대해 걱정한다면 다음과 같이하십시오.

    [Range(0, Double.PositiveInfinity)]

기본 오류 메시지는 다음과 같습니다.

SuchAndSuch 필드는 0과 무한대 사이 여야합니다.


최대 값을 수동으로 입력하는 것 외에는 선택의 여지가없는 것 같습니다. 나는 당신이 그것을 지정할 필요가없는 일종의 과부하가 있기를 바랐습니다.

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

당신이 사용할 수있는:

[Min(0)]

이렇게하면 필요한 최소값 0 (영)이 적용되고 최대 값이 적용되지 않습니다.

이것을 사용 하려면 DataAnnotationsExtensions필요 합니다.


가격으로 작업하는 경우 1 조 달러 이상의 비용이 들지 않는다고 가정 할 수 있습니다.

나는 사용할 것이다 :

[Range(0.0, 1000000000000)]

또는 실제로 필요한 경우 Decimal.MaxValue쉼표없이 값을 붙여 넣으십시오 .79,228,162,514,264,337,593,543,950,335

짐바브웨 출신이 아닌 경우이 중 하나가 제대로 작동합니다.


사용자 정의 유효성 검사를 사용할 수 있습니다.

    [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 });
        }
    }
}

나는 이런 식으로 시도하려고했다 :

[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.")]

나는 둘 것 decimal.MaxValue.ToString()이가 아닌 상한 가지고와 동등한 decmial 유형에 대한 효과적인 천장 때문이다.


범위를 사용하여

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

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

그것이 도움이되기를 바랍니다.


[Range(0.01,100000000,ErrorMessage = "Price must be greter than zero !")]

참고URL : https://stackoverflow.com/questions/3345348/how-to-specify-a-min-but-no-max-decimal-using-the-range-data-annotation-attribut

반응형