2010-03-22 5 views
1

현재 모든 언어가 현지화되어있는 MVC 2 앱에서 작업하고 있습니다 (현재 2 개는 영어 btw가 아닙니다). DataAnnotations를 사용하여 모델 클래스의 유효성을 검사하지만 DataTimeAttribute가 항상 true를 반환한다는 것을 알게 된 DateTime 필드의 유효성을 검사하려는 경우 유효 날짜가 아니든 아니든간에 (즉, 임의의 문자열 "foo"를 입력하면 IsValid) 메서드는 "01/01/0001"에 대해 확인합니다. 이유는 알지 못합니다. DataAnnotations 지역화 사용자 지정 유효성 검사 속성

는 확장 ValidationAtribute 클래스 내 자신의 검증을 쓰기로했다 : 유효하며,이 때하지,하지만 난 그것을 지역화하려고 할 때 내 문제가 시작되면 이제 확인을 확인
public class DateTimeAttribute : ValidationAttribute 
{ 
    public override bool IsValid(object value) 
    { 
     DateTime result; 
     if (value.ToString().Equals("01/01/0001 0:00:00")) 
     { 
       return false; 
     } 
     return DateTime.TryParse(value.ToString(), out result); 
    } 
} 

:

[Required(ErrorMessageResourceType = typeof(MSG), ErrorMessageResourceName = "INS_DATA_Required")] 
[CustomValidation.DateTime(ErrorMessageResourceType = typeof(MSG), ErrorMessageResourceName = "INS_DATA_DataType")] 
public DateTime INS_DATA { get; set; } 

필드에 아무것도 넣지 않으면 키 = INS_DATA_Required에 대한 지역화 된 MSG (MSG가 내 리소스 클래스 임)가 나타납니다.하지만 잘못된 형식의 날짜를 입력하면 "값 'foo'가 INS_DATA에 유효하지 않습니다"라는 오류 메시지가 나타납니다 메시지가 아니라 현지화 된 MSG가 있어야합니다.

내가 무엇을 놓치고 있습니까?

답변

0

하드 코딩 된 문자열이 일치하지 않도록 ToString()이 '현지화 된'형식을 사용하고있을 수 있습니다. "if"조건을 다음과 같이 바꾸어보십시오.

if((DateTime)value == DateTime.MinValue) 
+0

"if"가 정상적으로 작동하면 btw가 더 정중합니다. 내 질문은 모델 필드에서 ErrorMessageResourceType과 ErrorMessageResourceName을 모두 지정한다고해도 실제로는 영어로 기본 오류 메시지가 나타납니다. "값 '쉼표'가 INS_DATA에 유효하지 않습니다." 내 리소스 파일에 하드 코딩 됨. –

+0

아 맞아. 나는 잘 모르겠다. * 절름발이 대답은 다음과 같다. * 리소스를 찾을 수없는 것처럼 들린다. – Myster

관련 문제