2011-07-27 8 views
2

내보기에서 유효성 검사에 이상한 동작이 나타납니다.MVC3 속성 유효성 확인 질문

내 모델에이 속성이 있습니다.

[Display(Name = "Overflow Capacity")] 
    [RegularExpression(@"[-+]?[0-9]*\.?[0-9]?[0-9]", ErrorMessage = "Number required.")] 
    [Range(0,9999.99,ErrorMessage = "Value must be between 0 - 9,999.99")] 
    public decimal OverFlowCapacity { get; set; } 

내보기이있다 : 나는 'ABC'와 같은 값을 입력하면 내가 999999의 값을 입력하면, 내가 을 '번호가 필요한'검증 메시지가

<tr> 
    <td>@Html.LabelFor(m=> m.OverFlowCapacity)</td> 
    <td>@Html.EditorFor(m=>m.OverFlowCapacity)</td>            
    <td> @Html.ValidationMessageFor(model => model.OverFlowCapacity)</td> 
</tr> 

, 내가 얻을 유효성 검사 메시지 '값은 0 - 9,999.99 사이 여야합니다.'

예상대로 텍스트 상자를 탭 해제하면 두 메시지가 모두 수신됩니다. 텍스트 상자 값을 비워두고 탭을 끈 상태에서 예상대로 오류가 발생하지 않습니다.

그러나 제출할 때 유효성 검사 메시지 '오버 플로우 용량 필드가 필요합니다.'가 표시됩니다.

어디서 왔는지 모르겠습니다. 모델에서 모든 유효성 검사 특성을 제거하려고 시도했지만 여전히 '필수'메시지가 표시됩니다. 나는 잃어 버렸다.

다음은 내가 언급 한 스크립트입니다.

나는 나중에 게시 할 수 있습니다 mvcfoolproof 다른 문제가 있습니다. 이것이 내 문제를 어떻게 든 담당하지 않는다면 궁금합니다.

답변

8

양식이 제출 된 후 decimal 값이 null이 될 수 없다고 판별 한 후 사후 검증이 시작됩니다. 현재 null이 허용되지 않는 decimal 유형을 사용하고 있습니다. 이 동작을 원할 경우 양식을 제출하기 전에 유효성을 확인하려면 속성에 [Required] 특성을 추가하십시오. 그러나 이 기능을 원하지 않고 null 일 수 있다면 decimal에서 decimal? 또는 Nullable<decimal>으로 유형을 변경하십시오.

은 널 (null)을 허용하고 사전에 제출 확인하지 마십시오

[Display(Name = "Overflow Capacity")] 
[RegularExpression(@"[-+]?[0-9]*\.?[0-9]?[0-9]", ErrorMessage = "Number required.")] 
[Range(0,9999.99,ErrorMessage = "Value must be between 0 - 9,999.99")] 
[Required] 
public decimal OverFlowCapacity { get; set; } 

널 (null)을 허용하고 제거를 제출 후 유효성 검사 오류 :

[Display(Name = "Overflow Capacity")] 
[RegularExpression(@"[-+]?[0-9]*\.?[0-9]?[0-9]", ErrorMessage = "Number required.")] 
[Range(0,9999.99,ErrorMessage = "Value must be between 0 - 9,999.99")] 
public decimal? OverFlowCapacity { get; set; } 
+0

IMHO 만 필요한 속성은 오류 메시지를 무시하지 않으므로 아무런 차이가 없습니다. –

+0

감사합니다. Alexander. 나는 MVC에 꽤 익숙해 때로는 명백한 것조차 나를 도망 가게한다. 당신의 대답의 처음 두 줄만 읽은 후에 해결책을 알았습니다. –

+0

@Muhammad 그가 이미 얻은 오류에는 영향을 미치지 않는다는 점에서 맞습니다. 그러나 제출하기 전에 필드가 포커스를 잃었을 때 검증을 볼 수 있습니다. Jeff가 오류를 원한다면 잘 모르겠다. 그래서 그것을 포함하고 제거하기위한 해결책을 모두 포함했다. –

1

10 진수 형식을 nullable로 표시하지 않으므로 MVC는 게시중인 빈 필드의 처리 방법을 알지 못합니다. 당신이 널 (null)/빈 필드 허용 할 경우이 시도 :

public decimal? OverFlowCapacity { get; set; } 

을하고 당신이 사전에 제출 필드를 필요로 확인 메시지가하는 것은 채워해야 할 경우이 시도 : 무엇

[Required] 
public decimal OverFlowCapacity { get; set; } 
0

답변 위의 설명을 필요한 오류 메시지가 꽤 잘 그래서 나는 단지 두 번째 오류 메시지에 집중할 것입니다. 즉 'abc'를 넣으면 jquery가 "Number Required"를 알려줍니다.jquery는이 입력이 숫자 필드 만 받아 들여야한다는 것을 어떻게 알 수 있습니까? 정답은; 양식 필드로 생성되는 눈에 거슬리지 않는 속성을 통해 당신이 입력 필드를 검사하는 경우 당신은 당신이 똑같은 (숫자 검증)를 수행하는 속성을 가진 모델을 장식 할이 기본 검증 메시지를 무시할 수

그래서
<input name="OverFlowCapacity" id="OverFlowCapacity" data-val-number="Number Required"..../> 

같은 것을 발견하고 자신의 당신은 유효성 검사를 대체 할 수 있습니다 메시지

[Numeric(ErrorMessage="override message")] 
[Required(ErrorMessage="override Required message")] 
public decimal OverFlowCapacity{get;set;} 

숫자 속성이 DataAnnotation 또는 mvc 프레임 워크에 존재하는지 의심 스럽습니다. 당신은 그것에 대해 조사해야합니다. 일부 유용한 속성을 논의하고 사용할 수 있습니다 here

+0

필요한 숫자는 정규식 유효성 검사에서 나옵니다. –