2013-05-03 32 views
0

我註冊一個網站時,需要爲MVC 4.5自定義驗證一些建議使用自己的自定義數據註解最小年齡檢查自定義驗證的MVC 4.5

我確認某人的年齡。

我需要這些作爲字段傳遞給驗證程序。

(date) date of birth 
(date)event start date 
(int)min age value 

我在web.config中存儲了最小年齡和事件開始日期。所以這可以很容易地定製。 如果用戶的年齡不足以檢查事件日期,那麼他們無法註冊。

我該如何去做這件事?我已經檢查了一些例子,但似乎無法解決這個問題。

感謝...

回答

2

創建您自己的驗證屬性是要走的路,很容易實現。要創建一個,你只需要創建一個實現ValidationAttribute

public class MinAgeAttribute : ValidationAttribute 
{ 
    protected override ValidationResult IsValid(object value, ValidationContext validationContext) 
    { 
     // Do some validation checks here 
     var result = new ValidationResult("Sorry you are not old enough"); 

     return result; 
    } 

你重寫IsValid方法做你的驗證邏輯類,返回ValidationResult

0

您可以通過實現IValidatableObject接口,然後使用驗證方法進行自定義的驗證。檢查「Using IValidatableObject Custom Validation

請注意,IValidatableObject僅支持服務器端驗證。在我看來,最好有一個服務器端驗證。以防萬一您從web服務調用中使用相同的方法。

如果你想定製,然後客戶端驗證嘗試實施IClientValidatable和ValidationAttribute

+0

我希望那些推薦這個的人會指出它不支持客戶端驗證。它不,這可能是一個巨大的問題。 – 2013-05-03 14:06:44

+0

@MystereMan:我同意它不支持客戶端驗證。但是,最好有一個服務器端驗證。以防萬一您從web服務調用中使用相同的方法。如果你想自定義客戶端驗證,然後嘗試實施IClientValidatable – 2013-05-03 14:50:04

+1

@ARS我會說客戶端驗證只是一個額外的東西,你可以添加。好吧,它會減少流量,因爲你不會發送到服務器空表單,但服務器端驗證是真正的驗證。 – 2013-05-03 14:58:42

0

創建使用ValidationAttribute自己的註釋,並裝飾以必需的屬性。您必須覆蓋驗證()返回布爾值的方法。並在此基礎上,您可以執行您的操作

0

這不是真的有必要僅爲年齡驗證創建一個自定義屬性。您只需創建一個自定義屬性,即可根據出生日期計算年齡,然後在最小年齡的年齡屬性上添加正常範圍驗證屬性。

但問題是,您正在web.config中設置最小年齡,屬性是在編譯時創建的,而不是運行時創建的。

我會建議使用Fluent驗證,因爲您可以創建更好的驗證場景。