我正在使用VAB来验证一些带有属性的类,而我正在使用元数据类在不同的类之间共享相同的验证。
当我尝试验证控制器中的对象时(顺便说一下,我使用的是asp.net mvc),ValidationResults
没有错误,我的实体不应该有效。
但是,ASP.NET MVC是他的魔力,因为ModelState.IsValid
是错误的。我想问题是我正在进行手动验证的方式。
在Global.asax中,我正在加载类和元数据类之间的关联。
Global.asax中
private static void RegisterMetadataExtensions()
{
AssociatedMetadataTypeTypeDescriptionProvider typeDescriptionProvider;
typeDescriptionProvider =
new AssociatedMetadataTypeTypeDescriptionProvider(
typeof(FooViewModel), typeof(FooMetadata));
TypeDescriptor.AddProviderTransparent(typeDescriptionProvider,
typeof(FooViewModel));
typeDescriptionProvider =
new AssociatedMetadataTypeTypeDescriptionProvider(
typeof(FooCommand), typeof(FooMetadata));
TypeDescriptor.AddProviderTransparent(
typeDescriptionProvider, typeof(FooCommand));
}
控制器
[HttpPost]
public ActionResult Action(FooViewModel vm)
{
Validator<FooViewModel> validator =
ValidationFactory.CreateValidator<FooViewModel>();
ValidationResults res = validator.Validate(vm);
//res.Count is 0
OR
ValidationResults res = Validation.Validate<FooViewModel>(vm);
//res.Count is 0
//ModelState.IsValid is false
if(ModelState.IsValid)
欢迎任何想法。
先谢谢。
答案 0 :(得分:1)
我是企业库的忠实粉丝,但我认为使用MVC进行验证的更好方法是使ViewModel实现IValidatableObject
。这样,它会在设置ModelState.Isvalid
答案 1 :(得分:0)
为了让您的VAB验证器挂钩进入ASP.NET MVC的验证,我认为您需要实现ModelValidatorProvider并按照此处所述包装VAB验证结果... http://bradwilson.typepad.com/blog/2009/10/enterprise-library-validation-example-for-aspnet-mvc-2.html