2009-10-08 87 views
1

我明白带有基本要求和最小长度的注解类属性,并获得了asp.net mvc服务器端和客户端验证的所有好处。结合DataAnnotations验证与复杂的业务规则

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

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

回答

4

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

创建定制的验证检查,您可以创建从ValidationAttribute类派生的类或创建执行验证检查和参考的方法,其施加CustomValidationAttribute到时方法数据成员。当您创建派生自ValidationAttribute的类时,请重写IsValid方法以为您的自定义验证检查提供逻辑。

那里似乎有代码示例。

3

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

一旦在这里,您仍然可以根据您的业务规则进行所需的任何验证,就像您通常在没有数据注释的情况下一样(如果需要)。在您的操作中,即使数据注释验证通过,您也可以向ModelState添加错误。 在这种情况下,您会使用ModelState.addError添加错误,并将这些错误添加到DA提供的任何错误中。因此,在您的视图中,错误来自何处并不重要。或者,如果您的规则是一般性的,您可以编写自己的注释标签。数据注释的东西随其源代码分发,所以你可以完全控制它。

1

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