系列文章
ASP.NET MVC 3.0學習系列文章—序
ASP.NET MVC 3.0學習系列文章--Razor and ASP.NET MVC 3.0
ASP.NET MVC 3.0學習系列文章—Controllers in ASP.NET MVC 3.0
ASP.NET MVC
3.0學習系列文章--Dependency Resolution in ASP.NET MVC 3.0
這篇文章主要介紹如下基本分內容:
1. Introduction:
在ASP.NET MVC 3.0中, Model模組主要是在Validation這部分有很大的增強。包括ASP.NET MVCTeam Dev自己寫的使用jQuery來進行用戶端驗證的jquery.validate.unobtrusive.js,以及Remote validation等。剛才在園子看到一個同學寫了一篇文章介紹了Remote validation,寫的挺詳細的,大家可以看看。
http://www.cnblogs.com/serafin/archive/2011/01/25/1944848.html
我也會在這篇文章中稍微給大家介紹如何使用remote 驗證。
總的來說ASP.NET MVC 3.0中的Validation主要的改動有如下三個方面:
a.New attributes b. New interfaces, c. Improved client validation story.
2. Validation in MVC 3
在驗證方面分為如下幾部分:
3.Data Annotations
微軟的的System.ComponentModel.DataAnnotations就是一個好的驗證方法集合。
你可以看看它主要包含的類:
從它包含的這些方法中可以看出它主要是用來做欄位的驗證。在ASP.NET MVC或者是Silverlight中微軟都是使用它來做資料的合法性驗證。當然,在ASP.NET MVC 3.0中結合jQuery的用戶端驗證,使Data Annotation發揮的功能更加完美。
4.Custom Validation Attributes
在上面的System.ComponentModel.DataAnnotations命名空間中,有ValidationAttibute這個類,所有的attribute類型的驗證方法所在的類都繼承了它。
比如:
中的Required和StringLength,我們看看它們的所在的類:
這麼看來我們可以自訂Validation類,它也繼承ValidationAttribute。
自訂類的結構如下:
我們現在自訂一個驗證,來驗證輸入的時間是否是在合法的範圍呢。
當你輸入的時間不是在當前月的前6各月內或者是大於目前時間7天,就給出提示資訊。
5.Self Validation models
這種方式是在model中來結合 ValidationContext和ValidationResult來提供驗證。
例如我們的model中有一個startdate和一個enddate欄位,要求輸入的enddate不能小於startdate,那麼我們可以使用Self validation model這種驗證模式:
運行結果:
上面兩種驗證方式都是需要整個Form提交資料時post資料,大家估計都不可能接受,所以ASP.NET MVC團隊在ASP.NET MVC 3中添加了下面兩種驗證方式,
Client Validation和Remote Validation。
6.Client Validation:
明眼人都會發現,Microsoft這幾年和jQuery團隊走的很近,ASP.NET MVC項目中更是使用了jQuery來實現用戶端驗證。
很欣慰的是微軟終於放棄了之前自己的AJAX庫。。。。。
在使用jQuery的AJAX認證,需要注意如下幾點:
1.Web.Config中添加設定:
2.添加js檔案:
3.在Html.FormBegain之前添加:
我這裡有個例子,大家可以看看使用jquery.validate.unobtrusive.mis.js後,用戶端產生的html有什麼區別:
本身html的節點中就有了驗證資訊。
7.Custom Client Validation
ASP.NET MVC團隊提供的這個用戶端驗證方式也是個擴充性非常強的。
例子如下:
8.remote validation:
remote validation部分我就不作說明了,文章夠長了。。。。。
大家可以看看http://www.cnblogs.com/serafin/archive/2011/01/25/1944848.html 。
我個人覺得這個remote validation的原理就是即時向某個Action Post資料,然後再看返回結果是否為空白,不為空白就顯示Validation Message。主要還是使用了jQUery的ajax。
Nick