2009-07-16 5 views
0

MVC 응용 프로그램의 몇 가지 컨트롤에 유효성 검사 메서드를 추가하는 데 문제가 있습니다. 내보기에서asp.NET MVC 모델 상태 유효성 검사 문제

if (!Regex.IsMatch(candidateToEdit.availability.StartDate.ToShortDateString(), @"giantregex")) 
      ModelState.AddModelError("availability_StartDate", "Start date must be in the mm/dd/yyyy format."); 
//giantregex is a giant regular expression omitted for clarity 

내가 가진 : 나는 mm/dd/yyyy 형식을 테스트하려면 다음을 사용

<%= Html.ValidationSummary("Edit was unsuccessful. Please correct the errors and try again.") %> 

<%= Html.ValidationMessage("availability_StartDate", "*")%> 

어떤 이유에 대한 오류 텍스트가 표시되지 않는, 그것은이 인정 오류 및 목록 시작이 생성되지만 "시작 날짜는 mm/dd/yyyy 형식이어야합니다." 표시되지 않습니다. 날짜를 올바르게 입력했는지 확인합니다.

+0

유효성 검사가 부분보기 (일명 UserControl)에서 발생합니까? 이 문제는 부분 뷰의 입력에 대한 유효성 검사에서만 발생했습니다. – cfeduke

+0

아니요, 정상적인보기입니다. –

+0

사용자가 2/31/2009와 같은 날짜를 입력하면 어떻게 될까요? 정규식으로 날짜의 유효성을 검사 할 수 없습니다. – Paco

답변

3

여기서는 문제가 정규식에 대해 실제 DateTime 유형을 테스트하고 있다고 생각합니다. 텍스트 상자에 잘못된 날짜 시간 형식을 입력했기 때문에 ToShortDateString()을 호출 할 수있는 실제 DateTime으로 구문 분석되지 않습니다. 따라서 정규 표현식 유효성 검사는 실제로 발생하지 않습니다.

모든 잠재적 인 구문 분석 문제를 문자열 (예 : "candidateToEditViewModel.AvailabilityStartDateString")로 노출 시키거나 클라이언트 측 유효성 검사 및 프로그램을 방어 적으로 구현하는 ViewModel 패턴을 채택해야합니다.

+0

그 말이 맞습니다. 유효하지 않은 날짜가 게시 될 때 기본 값으로 초기화되는 것처럼 보입니다. 정규 표현식이 true를 반환해야하는 경우 그렇지 않은 경우를 반환합니다. –

+0

나는 DateTime이 아닌 DateTime을 선언했기 때문에 당신이 보았던 것이 유효성 검증에 내장되어 있다고 생각한다. 그래서 속성은 실제로 * required *입니다. – cfeduke

+0

그래서 나는 내가 필요한 논리를 토대로 조금씩 속일 수 있었다. 유효하지 않은 날짜가 게시 될 때마다 새 DateTime이 초기화되기 때문에 StartDate 값이 DateTime의 초기화 된 값과 같은지 확인하고 참이면 오류를 던집니다. 나를 직접적으로 그 해결책에 이르게하기 때문에 대답으로 표시됩니다. 감사. –

0

난 당신이 메시지를

<%= Html.ValidationSummary() %> 

EDIT를 얻을 수있는 검증 요약을 포함 할 필요가 있다고 생각합니다 "."퍼팅 시도해보십시오 대신 "_"이 같은 AddModelError 호출에 속성 이름으로 :

대신 :

ModelState.AddModelError("availability_StartDate", "Start date must be..."); 

이 시도 :

ModelState.AddModelError("availability.StartDate", "Start date must be..."); 
+0

<% = Html.ValidationSummary() %>이 (가) 있습니다. 내가 명확하게하기 위해 원래 게시물을 편집 할 것입니다. –

+0

_에서 a로 변경하십시오. 차이를 만드는 것 같지 않습니다, 이것은 이상합니다. 다른 모든 메시지와 잘 작동합니다. –

+0

내 코드에서 중단 점을 보여줍니다. _ 대신 모델 오류 키에 사용됩니다 (xVal을 사용하지만 조작은 동일하게 유지됩니다). – cfeduke

0

샘플 당신이 내 testproject에서 일을했다 . 새로 생성 된 프로젝트에서 오류를 재현 할 수 있습니까?

관련 문제