J'essaie de faire fonctionner la validation côté client pour une page qui utilise des modèles d'éditeurs.
Un exemple simplifié de mon modèle de vue est, par exemple, le suivant :
[Validator(typeof(ValidationTestModelValidator))]
public class ValidationTestModel
{
public string Name { get; set; }
public string Age { get; set; }
public ChildModel Child { get; set; }
}
Le modèle de l'enfant est par exemple :
public class ChildModel
{
public string ChildName { get; set; }
public string ChildAge { get; set; }
}
Mon validateur est par exemple :
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());
}
}
Et le validateur du modèle enfant est par exemple :
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");
}
}
J'ai enregistré FluentValidation.Net avec MVC3 en ajoutant ce qui suit à Application_Start() :
// Register FluentValidation.Net
FluentValidationModelValidatorProvider.Configure();
Cela génère une validation discrète côté client pour les deux propriétés Name et Age, mais rien pour les propriétés du ChildModel.
Une idée de ce que je fais de travers ?
Mise à jour : Cela semble fonctionner correctement si j'annote simplement le ChildModel avec l'attribut Validator, mais je veux appliquer la validation de manière conditionnelle, d'où l'utilisation de SetValidator().