用于驗證出生日期字段以確定年齡在制定的範圍之内的AgeRangeAttribute定義如下,簡單起見,我們直接讓它直接繼承自RangeAttribute。服務端驗證邏輯定義在重寫的IsValid方法中,并且重寫了FormatErrorMessage方法以便生成針對年齡的驗證消息。AgeRangeAttribute實作了IClientValidatable接口,并在實作的GetClientValidationRules方法中生成用戶端驗證規則。在生成的類型為“agerange”的ModelClientValidationRule 對象中包含三個參數(currentdate、minage和maxage),分别表示目前日期(用于計算年齡)、允許年齡的範圍。
由于ASP.NET MVC采用JQuery Validation進行用戶端驗證,我們可以通過如下的這段javascript來注冊用于實作用戶端驗證的function和添加相應的adapter。添加到jQuery.validator的用于進行年齡範圍驗證的function具有三個參數(value、element、params)分别表示被驗證的值、元素和傳入的參數。驗證邏輯必須的三個數值(目前日期、年齡範圍最小和最大值)通過參數params獲得。而該參數實際上是在添加adapter時從通過上面定義的GetClientValidationRules方法生成的驗證規則中擷取的。
現在我們将AgeRangeAttribute 應用到一個簡單的ASP.NET MVC應用中。在通過VS的ASP.NET MVC項目模闆建立的空Web應用中,我們定義了如下一個簡單的Person類型,我們定義的AgeRangeAttribute 應用到了表示出生日期的BirthDate上,并将允許的年齡上、下限設定為18和30。
然後我們添加如下一個HomeController,在預設的Action方法Index中我們将建立的Person對象呈現在預設的View中。
如下所示的代碼片斷代表了View的定義,我們直接調用HtmlHelper<TModel>的擴充方法EditorModel将作為Model的Person對象以編輯模式呈現在一個表單中。最後一點不要忘了在Layout檔案中講包含上述javascript片斷的js檔案包含進來。
運作我們的程式,輸入不合法出生日期并點選”Save”按鈕送出表單(針對第一次用戶端驗證),用戶端驗證将會生效,具體效果如下圖所示。