Я пытаюсь заставить клиентскую проверку работать на странице, которая использует шаблоны редактора.
Упрощенный пример модели моего вида, например:
[Validator(typeof(ValidationTestModelValidator))]
public class ValidationTestModel
{
public string Name { get; set; }
public string Age { get; set; }
public ChildModel Child { get; set; }
}
Дочерняя модель, например:
public class ChildModel
{
public string ChildName { get; set; }
public string ChildAge { get; set; }
}
Мой валидатор, например:
public class ValidationTestModelValidator : AbstractValidator<ValidationTestModel>
{
public ValidationTestModelValidator()
{
RuleFor(m => m.Name)
.NotEmpty()
.WithMessage("Please enter the name");
RuleFor(m => m.Age)
.NotEmpty()
.WithMessage("Please enter the age");
RuleFor(m => m.Age)
.Matches(@"\d*")
.WithMessage("Must be a number");
RuleFor(m => m.Child)
.SetValidator(new ChildModelValidator());
}
}
И дочерний валидатор модели, например:
public class ChildModelValidator : AbstractValidator<ChildModel>
{
public ChildModelValidator()
{
RuleFor(m => m.ChildName)
.NotEmpty()
.WithMessage("Please enter the name");
RuleFor(m => m.ChildAge)
.NotEmpty()
.WithMessage("Please enter the age");
RuleFor(m => m.ChildAge)
.Matches(@"\d*")
.WithMessage("Must be a number");
}
}
Я зарегистрировал FluentValidation.Net с MVC3, добавив в Application_Start () следующее:
// Register FluentValidation.Net
FluentValidationModelValidatorProvider.Configure();
Это создает ненавязчивыйпроверка на стороне клиента идеально подходит для двух свойств Name и Age, но не для свойств в ChildModel.
Есть идеи, что я здесь не так делаю?
Обновление: Кажется, это работает нормально, если я просто аннотирую ChildModel с атрибутом Validator, однако я хочу применить проверку условно, отсюда и использование SetValidator ().