2011-06-03 131 views
1

作为ASP.NET MVC3项目的一部分,我们已经实现了一些自定义验证。在特定实体例如UniqueMandatoryCode,我们已经获得了[Required]和我们的[CustomValidationDataAnnotation]。ASP.NET MVC 3验证命令

他们都工作,但我想知道在验证的执行顺序方面发生了什么。我遇到的问题是我们的CustomValidation代码在[Required]验证之前被击中。当我们传递空值时,这会造成问题。

所以问题是,我如何控制验证顺序,即首先经过[必需的]验证,然后进行[CustomValidationDataAnnotation]验证。

回答

0

我想验证顺序不容易控制。 常用技巧是忽略所有其他验证器中的空/未指定的情况(忽略=您认为它是有效的)。无论如何,如果该值是强制性的,将处理该情况,那么将添加必需的验证器。如果该值是可选的,那么为什么要将自定义验证规则应用于空的/未指定的值?

+0

这实际上是我在自定义代码中所做的。我忽略它并将其视为有效,并将其留给内置的验证来处理。但是,要做到这一点,我有额外的代码来检查空值,如果可能,我想避免这种情况。 – DavidS 2011-06-03 11:16:29

+0

我还是不明白,如果你不检查null,规则的排序如何帮助你将验证器添加到可选字段。我认为分开这些问题还是比较好的,即使你知道在你的情况下,这些字段总是强制性的。验证规则顺序的基础结构和配置可能太复杂,无法实现和使用,而与在验证程序中可以省略初始值的好处相比较。 – 2011-06-03 14:45:23

+0

我不知道如何让事情更清楚tbh。我希望如果系统首先会进行[required]验证,那么它不会继续进行包含检查空值的自定义验证,从而为我节省了一些代码行。 – DavidS 2011-06-04 05:18:26