2011-06-03 132 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