2012-07-17 2 views
0

에서 공개 목록 > 나는이 내 모델에서 다음 등록 정보 : 검증 MVC3

가 어떻게 DataAnnotation 유효성 검사와 위의 목록에 각 문자열의 유효성을 검사 할 수 이 MVC3에서 속성

[StringLength(100, ErrorMessage = "Must be less than 100 Chars", MinimumLength = 3)] 
public List<KeyValuePair<int, string>> Authors { get; set; } 
?

전혀 가능합니까?

답변

1

구조에 사용자 정의 유효성 검사!

  1. IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
  2. 을 구현 IValidatableObject 인터페이스
  3. 을 구현 각 문자열 미만 100 자
  4. 여기

이있는 코드

있다고 결정하는 로직을 구현 : 다음을 수행해야합니다
public class YourModel : IValidatableObject 
{ 
    public List<KeyValuePair<int, string>> Authors { get; set; } 

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) 
    { 
     foreach(KeyValuePair<int, string> myKvp in Authors) 
     { 
      if(myKvp.Value.Length >= 100) 
      { 
       yield return new ValidationResult("Must be less than 100 characters"); 
      } 
     } 
    } 
} 

그런 식으로에 전화 할 수 있습니다. 컨트롤러 작업에을 입력하고보고 된 오류를 반환하십시오. 당신의 KeyValuePair 항목이 특정 개체를 참조하는 경우에도 같은 작업을 수행 할 수 있습니다

yield return new ValidationResult("Must be less than 100 characters", new string[] { myKvp.Key.ToString() }); 

당신은 당신의 페이지에있는 속성의 ID에 맞게 그것을 조정할 필요 했어. 이렇게하면 오류 메시지가 페이지의 입력과 관련 될 수 있습니다.

내 개체의 상태에 따라 유효성 검사를 수행하는 경우가 많기 때문에 IValidatableObject을 여러 위치에서 덮어 씁니다. 귀하의 사례는 조금 다르지만 위의 예에서 볼 수 있듯이 확실히 할 수 있습니다. (그러나 내 머리 꼭대기에서 벗어난 모든 것이 완벽하지 않을 수 있습니다!)