2013-08-29 128 views
1

我正在開發一個MVC 4項目。我在單個屬性上有多個自定義驗證屬性的問題。假設我有如單一的財產3自定義驗證屬性:單個屬性的多個自定義驗證屬性

public class Test 
{ 
    [customAttribute1] 
    [customAttribute2] 
    [customAttribute3] 
    public string property1 { get; set; } 
} 

目前發帖時,他比所有三種自定義驗證是指對財產(無論是第一個驗證合格,或是否失敗)進行的形成。

我想要的是如果customAttribute1驗證失敗,不需要驗證下一個下一個自定義屬性的屬性。我怎樣才能做到這一點?

+1

此答案可能有所幫助:http://stackoverflow.com/questions/2301481/is-there-any-way-to-stop-dataannotation-validation-after-the-first-failure我也會看看驗證框架,就像FluentValidation(http://fluentvalidation.codeplex.com/)那樣實現。 –

+0

這意味着這三個屬性之間有關係。爲什麼不在一個屬性方法中編寫它們並將其用作單個屬性。 –

+0

像[CheckUniqueName]之類的[Required]之類的關係,所以如果property爲null,那麼爲什麼要做額外的處理 – user1740381

回答

0

不支持訂購或有條件地執行AFAIK。

最好的辦法是將所有這3個驗證都放在同一個屬性中。

如果你非常需要這種驗證,那麼Fluent Validation可以爲你做。

1

這種行爲的一點是要在型號後面返回(到UI)中的所有錯誤,使用戶可以在同一時間修復所有的錯誤...

比方說,你希望你的密碼至少8個字符,並至少有一個大寫字母和一個數字。您希望驗證運行的方式是在沒有檢查其餘的密碼的情況下密碼不夠長時停止。典型的使用場景:

User sets password "foo" -> submit 
error - Password too short 
User sets it to "foofoofoo" 
error - Password must have an uppercase 
User sets it to "FooFooFoo" 
error - Password must have a number 
User goes away frustrated... 

所以,如果3個屬性要一起驗證,我的建議是保持這種行爲。如果3是獨佔的,那麼按照其他人的建議並將它們合併爲一個屬性。