6

다른 3 개의 ViewModel으로 구성된 ViewModel이 있다고 가정 해 봅시다. 하나는 항목 목록을 포함하고 다른 하나는 [필수] 속성을 가진 클래스의 인스턴스를 포함하고 다른 항목의 다른 목록을 포함합니다.MVC 3 ModelState.IsValid with Multiple ViewModels

사용자가 두 목록 중 하나에서 항목 중 하나를 선택하면 ModelState가 유효하지 않게하려면 두 번째 객체의 [Required] 속성을 원하지 않습니다. 왜냐하면 사용자가 해당 항목 중 하나를 선택하면 [Required] 속성을 가진 항목으로 양식을 작성하지 않아도됩니다.

이 문제를 어떻게 해결할 수 있습니까?

답변

5

하나의 옵션은 ModelState.Remove ("KeyName")를 사용하여 "위반"유효성 검사를 제거하는 것입니다. 나는 정확히 같은 시나리오를 가지고 다음의 구현 : 그것은 비록 중요

var MyModel = _someService.GetModelById(id); 
TryUpdateModel(MyModel); 
ModelState.Remove("MyModel.OffendingField"); 
if (ModelState.IsValid) 
{ 
    ... 
} 

이이 노크에 코드의 다른 영역에 영향을주지 않습니다 있는지 확인하는 것이.

+0

전체 ViewModel의 유효성을 검사하는 대신 사용자 선택에 의해 영향을받는 모델의 조건을 제안하고 조건에 따라 유효성을 검사합니다. 더욱이, 이것은 내가 어플리케이션 디자인을 재고하게 만들었고 고맙게도 문제를 해결할 수있는 몇 가지 더 나은 방법을 발견했다. – ewahner