환경 :
MVC4, Razor 2 및 FluentValidation.MVC4 (3.4.6.0)를 사용 중입니다.FluentValidation에서 하위 오류를 부모에게 전파하십시오.
시나리오 :
public class ProfileViewModel
{
public string FirstName {get; set;}
public PhoneNumberViewModel Primary {get; set;}
// ... other stuff ... //
}
public class PhoneNumberViewModel
{
public string AreaCode { get; set; }
public string Exchange { get; set; }
public string Suffix { get; set; }
public string Extension { get; set; }
}
이 프로필을 편집하고 다시 업데이트에 대한 게시 될 수 있습니다
나는 다음과 같이 또한에 아이 뷰 모델을 가지고 특정 페이지에 대한 복잡한 뷰 모델을 가지고있다. 다음 두 가지 모두에 대해 Fluent Validators를 만들었습니다.
public class ProfileViewModelValidator : AbstractValidator<ProfileViewModel>
{
public ProfileViewModelValidator()
{
RuleFor(m => m.FirstName).NotEmpty().WithMessage("Please enter a First Name,");
RuleFor(m => m.Primary).SetValidator(new PhoneNumberViewModelValidator()).WithMessage("Hello StackOverflow!");
// ... other validation ... //
}
}
public class PhoneNumberViewModelValidator : AbstractValidator<PhoneNumberViewModel>
{
public PhoneNumberViewModelValidator()
{
RuleFor(m => m.AreaCode).NotEmpty();
}
}
그런 다음 모든 것을 표시 할보기가 있습니다.
프로필보기 발췌문 :
...
@Html.TextBoxFor(m => m.FirstName)
@Html.EditorFor(m => m.PrimaryPhoneNumber)
...
전화 번호 편집기 템플릿 코드 조각 :
...
@Html.ValidationLabelFor(m => m, "Primary Phone:")
@Html.TextBoxFor(m => m.AreaCode)
@Html.TextBoxFor(m => m.Exchange)
@Html.TextBoxFor(m => m.Suffix)
@Html.TextBoxFor(m => m.Extension)
@Html.ValidationMessageFor(m => m)
...
이 관련이 있다면, 내가 설정 한 물건을 가지고있는 다양 한 개체가 자동으로 선까지 검증을되도록. 실제로 위의 .SetValidator()
줄이 필요하지 않습니다 ... 모든 것이 와이어로 인해 유효하게 처리됩니다.
목적 : 나는 이름을 입력하지 않으면
, 내가 ValidationMessageFor에 의해 생성 된 영역 위에 제공된 오류 메시지가 표시됩니다. 그러나 자식 PhoneNumberViewModel의 요소 중 하나라도 유효성 검사에 실패하면 아무 것도 얻지 못합니다. 텍스트 상자가 빨간색으로 강조 표시되어 환상적이지만 내 자식 속성이 유효하지 않음을 나타내는 .WithMessage()
에 제공된 메시지를받지 못했습니다.
현재 내 컨트롤러에서 추가 작업을 통해이를 달성하고 있습니다 ... 자식 개체에서 오류를 찾아 부모 개체에 오류를 추가합니다. 이 접근법은 정말 나쁜 냄새를 풍깁니다. 컨트롤러에 유효성 검사와 관련한 문제가 있습니다. 말할 것도없이 문자열로 색인 생성을 많이하여 ModelState를 파고 들며 결국은 총체적입니다.
유효성 검사에 실패 할 경우 ProfileViewModel에 오류를 추가하는 ProfileViewModelValidator에 대한 유효성 검사 규칙을 정의하는 간단한 방법이 있습니까? 그리고/또는 그것이 작동해야하지만, 내가 뭔가 잘못하고있는거야? 검색하고 검색했지만 만족스러운 해결책을 찾을 수 없습니다.
시간 내 주셔서 감사합니다.
내 자신보다 덜 이상적인 솔루션을 수락하기 전에 일주일 정도 기다렸습니다. 궁극적으로 최고의 솔루션은 자동 검증 와이어 제거를 제거하고 항상 수동으로 유효성 검사를 설정하는 것입니다. 슬프게도이 경우 나를위한 옵션이 아닙니다. – Mir