将DataAnnotations验证与复杂的业务规则相结合

时间:2009-10-08 07:30:46

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

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

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

目标:不希望有两种生成和输出验证方法的方法。

4 个答案:

答案 0 :(得分:4)

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

  

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

那里似乎有示例代码。

答案 1 :(得分:3)

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

一旦到达此处,您仍然可以根据业务规则进行任何验证,就像通常没有数据注释一样,如果您愿意的话。在您的操作中,即使传递了数据注释验证,也可以向ModelState添加错误。 在这种情况下,您使用ModelState.addError添加错误,并将这些错误添加到DA提供的任何错误中。因此,在您的视图中,错误的来源无关紧要。

或者,如果您的规则是一般的,您可以编写自己的注释标记。数据注释事物与其源一起分发,因此您可以完全控制它。

答案 2 :(得分:1)

您可以使用Microsoft企业库5中实际基于DataAnnotations类的VAB(应用程序验证块),但您可以通过配置轻松完成复杂的业务逻辑... 我建议你看一下......

答案 3 :(得分:1)

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

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

相关问题