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.