가격의 10 진수 필드가 0보다 크거나 같아야한다고 지정하고 싶지만 실제로 최대 값을 부과하고 싶지 않습니다.
여기에 내가 지금까지 가지고있는 것이 있습니다 ...이 작업을 수행하는 올바른 방법이 무엇인지 잘 모르겠습니다.
[Range(typeof(decimal), "0", "??"] public decimal Price { get; set; }
가격의 10 진수 필드가 0보다 크거나 같아야한다고 지정하고 싶지만 실제로 최대 값을 부과하고 싶지 않습니다.
여기에 내가 지금까지 가지고있는 것이 있습니다 ...이 작업을 수행하는 올바른 방법이 무엇인지 잘 모르겠습니다.
[Range(typeof(decimal), "0", "??"] public decimal Price { get; set; }
답변:
이런 식으로 어떻습니까 :
[Range(0.0, Double.MaxValue, ErrorMessage = "The field {0} must be greater than {1}.")]
그것은 당신이 찾고있는 것을해야하며 문자열 사용을 피할 수 있습니다.
The field Fixed price discount must be between 0.01 and 1.79769313486232E+308.
최대 값을 수동으로 입력하는 것 외에는 선택의 여지가없는 것 같습니다. 나는 당신이 그것을 지정할 필요가없는 일종의 과부하가 있기를 바랐습니다.
[Range(typeof(decimal), "0", "79228162514264337593543950335")]
public decimal Price { get; set; }
[Min(0)]
-또한 더 나은 유효성 검사 메시지가 있습니다. 답변을 업데이트 해 보시기 바랍니다
당신이 사용할 수있는:
[Min(0)]
이렇게하면 필요한 최소값 0 (영)이 적용되고 최대 값이 적용되지 않습니다.
이것을 사용 하려면 DataAnnotationsExtensions 가 필요 합니다.
가격을 다루는 경우 1 조 달러 이상의 비용이 들지 않는다고 가정 할 수 있습니다.
나는 사용할 것이다 :
[Range(0.0, 1000000000000)]
또는 실제로 필요한 경우 Decimal.MaxValue
쉼표없이 값을 붙여 넣으십시오 .79,228,162,514,264,337,593,543,950,335
짐바브웨 출신이 아닌 경우이 중 하나가 제대로 작동합니다.
[Range(0.0,Decimal.MaxValue)]
?
사용자 정의 유효성 검사를 사용할 수 있습니다.
[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 유형에 대한 효과적인 천장 때문이다.