0

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

在 Global.asax 中,我正在加载类和元数据类之间的关联。

全球.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

或者

    ValidationResults res = Validation.Validate<FooViewModel>(vm);

    //res.Count is 0

    //ModelState.IsValid is false
    if(ModelState.IsValid)

欢迎任何想法。

先谢谢了。

4

2 回答 2

1

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

于 2012-08-10T07:55:34.003 回答
0

为了使您的 VAB 验证器挂钩到 ASP.NET MVC 的验证,我认为您需要实现 ModelValidatorProvider 并按照此处所述包装 VAB 验证结果... http://bradwilson.typepad.com/blog/2009/10/enterprise-库-验证-示例-for-aspnet-mvc-2.html

于 2012-08-11T10:45:32.223 回答