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