Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Validation ASP.NET MVC 3验证顺序_Validation_Asp.net Mvc 3 - Fatal编程技术网

Validation ASP.NET MVC 3验证顺序

Validation ASP.NET MVC 3验证顺序,validation,asp.net-mvc-3,Validation,Asp.net Mvc 3,作为ASP.NET MVC3项目的一部分,我们实现了一些自定义验证。对于特定实体,例如UniqueMandatoryCode,我们获得了[Required]和[CustomValidationDataAnnotation] 它们都有效,但我想知道在验证的执行顺序方面,引擎盖下发生了什么。我遇到的问题是,我们的CustomValidation代码在[必需的]验证之前被命中。当我们传递空值时,这会带来问题 因此,问题是,我如何控制验证顺序,即首先进行[Required]验证,然后进行[CustomV

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

它们都有效,但我想知道在验证的执行顺序方面,引擎盖下发生了什么。我遇到的问题是,我们的CustomValidation代码在[必需的]验证之前被命中。当我们传递空值时,这会带来问题


因此,问题是,我如何控制验证顺序,即首先进行[Required]验证,然后进行[CustomValidationDataAnnotation]验证

我想验证顺序不容易控制。
常见的技术是在所有其他验证器中忽略空/未指定的大小写(ignore=将其视为有效)。如果该值是处理该情况的必需值,则无论如何都将添加所需的验证器。如果该值是可选的,为什么要对空/未指定的值应用自定义验证规则?

这实际上就是我在自定义代码中所做的。我忽略它,将其视为有效,并将其留给内置验证来处理。然而,为了做到这一点,我有额外的代码来检查空值,如果可能的话,我希望避免这种情况。我仍然不明白如果不检查空值,规则的顺序将如何帮助您将验证器添加到可选字段。我认为最好将这些关注点分开,即使您知道在您的情况下,字段始终是强制性的。与在验证器中节省初始if相比,验证顺序规则的基础结构和配置可能太复杂,无法实现和使用。我不确定如何才能让事情更清楚。我希望如果系统首先进行[必需的]验证,它不会继续进行包含空值检查的自定义验证,从而为我节省一些代码行。是的,我理解这种情况。这将需要验证框架对所需的验证进行优先级排序,并在验证失败时停止对该字段的进一步验证。我很确定这不是现成的支持。即使它得到支持,我也建议使用健壮的实现,检查空/空值,而不是依赖这些隐藏的依赖项。由于这不是常见的做法,没有人会期望您的自定义验证器只能与所需的验证器结合使用,因此如果以后有人重用您的验证器,则会导致问题。啊,这就是我想要的答案。因为它不是开箱即用的行为支持,所以我将继续检查空值。谢谢。