对于我的项目,我使用两个库:
- FluentValidation (http://fluentvalidation.codeplex.com/) 用于视图模型验证
- MVC 扩展 (http://mvcextensions.codeplex.com/) 为我的视图模型流畅地配置元数据
这是我配置它们的方式(这是在容器构建器类中完成的):
/* Model Metadata Registration */
IEnumerable<IModelMetadataConfiguration> configurations = container.Resolve<IEnumerable<IModelMetadataConfiguration>>();
IModelMetadataRegistry registry = new ModelMetadataRegistry();
configurations.Each(configuration => registry.RegisterModelProperties(configuration.ModelType, configuration.Configurations));
ModelMetadataProviders.Current = new ExtendedModelMetadataProvider(registry);
/* Fluent Validation Configuration */
FluentValidationModelValidatorProvider.Configure(x =>
{
x.ValidatorFactory = container.Resolve<IValidatorFactory>();
x.AddImplicitRequiredValidator = false;
})
现在,当我运行应用程序时,FluentValidationModelValidatorProvider 不会验证模型。而是使用默认机制。因此我不得不注释掉 FluentValidationModelValidatorProvider 配置并改用这种方法:
IValidator validator = _validatorFactory.GetValidator(typeof(RegisterUserCommand));
ValidationResult result = validator.Validate(command);
接着:
if (!result.IsValid)
{
command.Password = String.Empty;
command.ConfirmPassword = String.Empty;
ModelState.Clear();
ModelState.AddModelErrors(result.Errors);
return View(command);
}
但必须有一种方法让它们一起工作。有什么建议吗?