【问题标题】:Validation Application Block - How to use validation metada class验证应用程序块 - 如何使用验证元数据类
【发布时间】:2012-08-09 09:18:31
【问题描述】:

我正在使用 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)

欢迎提出任何想法。

提前致谢。

【问题讨论】:

    标签: asp.net-mvc enterprise-library modelmetadata validation-application-bl metadatatype


    【解决方案1】:

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

    【讨论】:

    • 你不知道 OPs 的要求,所以你不能建议 DataAnnotations。 VAB 具有许多 DataAnnotations 所没有的特性和扩展点,例如基于配置的验证和构建基于(无属性)代码的配置的可能性。
    • 我知道a)他正在使用属性,b)元数据类,因为我已经阅读了这个问题。这就是我提出这个建议的原因
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2011-09-17
      • 2011-12-28
      • 1970-01-01
      • 2011-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-01
      • 1970-01-01
      相关资源
      最近更新 更多