0

我正在使用VAB来验证一些具有属性的类,我正在使用元数据类来在不同的类之间共享相同的验证。 当我尝试验证控制器中的对象(顺便说一句,我使用的是asp.net mvc)ValidationResults没有错误,我的实体不应该是有效的。 但是,ASP.NET MVC做了他的魔术,因为ModelState.IsValid是错误的。我想问题是我正在做手动验证的方式。验证应用程序块 - 如何使用验证metada类

在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) 

任何想法是值得欢迎的。

谢谢先进。

回答

1

我是企业图书馆的忠实粉丝,但我认为使用MVC进行验证的更好方法是让您的ViewModel实现IValidatableObject。这样,它会在绑定阶段自动得到验证ModelState.Isvalid

+0

你不知道OP的要求,所以你不能建议DataAnnotations。 VAB具有DataAnnotations没有的许多功能和扩展点,例如基于配置的验证和构建(无属性)代码配置的可能性。 – Steven 2012-08-10 08:41:54

+0

我知道a)他使用属性,b)元数据类,因为我已经阅读了这个问题。这就是为什么我提出这个建议* – podiluska 2012-08-10 08:45:08

相关问题