【问题标题】:Combine DataAnnotations Validation with complex business rules将 DataAnnotations 验证与复杂的业务规则相结合
【发布时间】:2010-12-04 21:41:05
【问题描述】:

我了解使用基本要求和最小长度注释类属性,并获得 asp.net mvc 服务器端和客户端验证的所有好处。

但是,有没有人有一个链接可以显示您如何将此“基础”验证与更复杂的业务规则结合起来。我将如何运行业务规则功能,例如,客户是否在去年订购了任何东西(需要数据库命中)并且仍然使用相同的 DataAnnotation 和 mvc 验证管道?

目标:不想要两种生成和输出验证方法的方式。

【问题讨论】:

    标签: asp.net-mvc validation data-annotations


    【解决方案1】:

    数据注释在您的操作被调用之前运行。然后,无论验证是否成功,仍会调用该操作。如果 DA 检测到无效数据,您的 ModelState 将无效。

    在这里,您仍然可以根据您的业务规则执行任何您想要的验证,如果您愿意,您通常会在没有数据注释的情况下执行此操作。在您的操作中,即使数据注释验证通过,您也可以向 ModelState 添加错误。 在这种情况下,您使用 ModelState.addError 添加错误,这些错误将添加到 DA 提供的任何错误中。因此,在您的视图中,错误来自何处并不重要。

    或者,如果您的规则是通用的,您可以编写自己的注释标签。 Data Annotation 是随其源分发的,因此您可以完全控制它。

    【讨论】:

      【解决方案2】:

      来自http://msdn.microsoft.com/en-us/library/dd901590%28VS.95%29.aspx:

      要创建自定义验证检查,您可以创建一个派生自 ValidationAttribute 类的类,也可以创建一个执行验证检查的方法,并在将 CustomValidationAttribute 应用于数据成员时引用该方法。当您创建派生自 ValidationAttribute 的类时,重写 IsValid 方法以提供自定义验证检查的逻辑。

      那里似乎有示例代码。

      【讨论】:

        【解决方案3】:

        您可以使用 Microsoft Enterprise Library 5 中的 VAB(应用程序验证块),它实际上基于 DataAnnotations 类,但您可以通过配置非常轻松地完成复杂的业务逻辑...... 我建议你检查一下...

        【讨论】:

          【解决方案4】:

          看看下面的文章,你可以在同一字段上多次使用 DataAnnotations,比较 N 个属性和 N 个值......

          http://www.codeproject.com/KB/validation/MultipleDataAnnotations.aspx

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2015-05-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-05-18
            • 2011-04-30
            • 1970-01-01
            相关资源
            最近更新 更多