2017-02-24 1 views
0

C# MVC 4 서버 측을 사용하고 있습니다. 사이트의 Gerenel 목적은 입력 된 텍스트 정보와 사용자가 커밋 한 파일을 얻는 것입니다.MVC 4 자동 모델 유효성 검사가 중첩 ViewModel과 함께 ViewModel에 붙습니다.

따라서 FileMorphViewModel이라는 사용자가 입력 한 텍스트 정보에 대한 정보가 들어있는 "부모"ViewModel 인 ViewModel을 사용합니다. 이 "부모"ViewModel에는 FileUploadViewModel을 호출 할 수있는 다른 "자식"ViewModel이 포함되어 있습니다.

이러한 ViewModel 각각은 IValidateObject에서 파생되며 해당 모델의 현재 특성 만 유효성을 검사하는 사용자 지정 유효성 검사 기능을 소유합니다. 즉, "자식"ViewModel은 자신의 고유 한 유효성 검사 기능을 소유하고 있으므로 "부모"ViewModel은 "자식"ViewModel에 대한 유효성 검사를 수행하지 않습니다.

"자식"ViewModel은 MVC 4에서 제공하는 자동 모델 유효성 검사를 통해 유효성이 검사되고 ModelState가 예상대로 설정됩니다. 그 후 "자식"ViewModel은 MVC 모델 바인딩 논리에 의해 "부모"ViewModel에 성공적으로 바인딩됩니다. "자식"ViewModel에 대한 유효성 검사가 실패하면 "부모"ViewModel에 대한 유효성 검사 기능이 더 이상 처리되지 않지만 모델 바인딩에서 자동으로 수행되는 두 가지 유효성 검사를 처리하고 싶습니다. 이를 달성 할 수있는 방법이 있습니까 아니면 내 컨트롤러의 ViewModels을 수동으로 검증 할 수있는 유일한 방법입니까?

public class FileInformationViewModel : IValidatableObject 
{ 
    public FileInformationViewModel() 
    { 
     ViewModel1 = new FileUploadViewModel(); 
    } 

    public FileUploadViewModel ViewModel1 { get; set; } 
    public string InputFieldToBeSet { get; set; } 

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) 
    { 
     if (!string.IsNullOrWhiteSpace(InputFieldToBeSet)) 
     { 
      var result = new ValidationResult("Enter some information, please!", new[] { nameof(InputFieldToBeSet) }); 
      yield return result; 
     } 
    } 

답변

0

IValidatableObject 단락 유효성 검사를 사용 :

내 구조를 설명하기 위해, 여기에 "부모"뷰 모델입니다. 반환 된 첫 번째 오류는 더 이상의 유효성 검사를 중지합니다. 그것은 게임의 휴식입니다. 그 주위에 방법이 없습니다.

모든 오류가 즉시 필요하면보기 모델 속성의 데이터 주석을 사용하여 모델 바인더가 유효성 검사를 처리하도록해야합니다. 이런 식으로 상상할 수있는 거의 모든 시나리오를 실제로 처리 할 수 ​​있습니다. 항상 고유 한 유효성 검사 속성을 추가하거나 여러 유효성 검사 라이브러리 라이브러리를 사용할 수 있습니다.

+0

빠른 답변 감사드립니다. 실제로 필자는 필요한 경우 데이터 주석을 사용하여 데이터 주석을 사용할 수 있는지 궁금해했습니다. 그러나 유효성 검사 기능에서 좀 더 복잡한 유효성 검사가 있습니다. Submodel에서 IValidationObject를 제거하고 부모 모델에 오류를 반환하고 대신 prent 수준에서 차일 오류를 추가했습니다. 그럼에도 불구하고 대부분의 경우 귀하의 조언이 가장 적절하다고 생각합니다. – doodles975

관련 문제