MVC 및 데이터 주석을 사용하여 클라이언트 측에 0보다 큰 유효성 검사기를 추가하는 가장 좋은 방법은 무엇입니까?


94

특정 필드의 값이 0보다 큰 경우에만 양식 제출을 허용하고 싶습니다. Mvc 범위 속성을 사용하면 테스트보다 큰 값만 나타 내기 위해 1 개의 값만 입력 할 수 있다고 생각했지만 그것은 최소 및 최대 값을 주장하기 때문에 운이 없습니다.

이것이 어떻게 달성 될 수 있는가?

답변:


245

기본 데이터 유형이 보유 할 수있는 것보다 큰 숫자를 저장할 수 없으므로 Range 속성에 최대 값이 필요하다는 사실은 매우 좋은 것입니다. 그 기억 ∞다음 작동합니다, 그래서 현실 세계에 존재하지 않습니다

[Range(1, int.MaxValue, ErrorMessage = "Please enter a value bigger than {1}")]
public int Value { get; set; }

이 접근 방식의 단점은 "abcd"를 확인하면 다음과 같이 표시된다는 것 Please enter a value less than or equal to 2147483647입니다.
— Mike Cole

숫자 필드에 문자를 입력 할 수 없어야합니다. 내가 가진 문제는 9999999999999999999를 입력하면 내 번호가 너무 작다는 것입니다.
— John Lord

16

이 답변은 float / double에 대한 양의 값을 확인하기 위해 찾고 있습니다. 이러한 유형은 'Epsilon'에 유용한 상수를 가지고 있습니다.

0보다 큰 가장 작은 양의 System.Double 값을 나타냅니다.

    [Required]
    [Range(double.Epsilon, double.MaxValue)]
    public double Length { get; set; }

Epsilon은 실제로 미적분 함수입니다. 기본적으로 "0과 구별 할 수있는 가장 작은 숫자"라고 말하는 "제한"기능이므로 .00000001 항목으로 끝날 수 있습니다. 나는 분에 현실적인 숫자를 넣을 것입니다.
— John Lord

9

다음과 같이 자신 만의 유효성 검사기를 만들 수 있습니다.

    public class RequiredGreaterThanZero : ValidationAttribute
{
    /// <summary>
    /// Designed for dropdowns to ensure that a selection is valid and not the dummy "SELECT" entry
    /// </summary>
    /// <param name="value">The integer value of the selection</param>
    /// <returns>True if value is greater than zero</returns>
    public override bool IsValid(object value)
    {
        // return true if value is a non-null number > 0, otherwise return false
        int i;
        return value != null && int.TryParse(value.ToString(), out i) && i > 0;
    }
}

그런 다음 해당 파일을 모델에 포함하고 다음과 같은 속성으로 사용합니다.

    [RequiredGreaterThanZero]
    [DisplayName("Driver")]
    public int DriverID { get; set; }

나는 일반적으로 드롭 다운 유효성 검사에 이것을 사용합니다. validationattribute을 확장하므로 매개 변수를 사용하여 오류 메시지를 사용자 정의 할 수 있습니다.


1
사용자 지정 유효성 검사기가 필요한 다른 상황에 대해이 답변을 사용하게되었습니다. 0 검증보다 큰 단순한 정수의 경우 Darin의 대답을 사용해야합니다.
— Zach

나는 실제로 그의 방법을 선호하지만, 내가 함께 일하는 사람들은 가치에 대해 "임의로 한계를 설정"하는 문제를 가지고있다.
— John Lord

하, 이상해 보인다. 유효한 범위가 최대 정수 크기보다 작 으면 추론을 볼 수 있습니다.
— Zach

소수와 관련된 문제입니다. 보지 않고는 최소 또는 최대 기능이 내장되어 있지 않다고 확신합니다.
— John Lord

이것은 나에게 최고의 솔루션이었습니다!
— Dave Stuart 19
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.