天天看點

MVC中擷取模型屬性的Range和StringLength驗證特性設定

MVC中的用戶端及服務端模型驗證資訊都以ModelMetadata類型作為承載,在獲得屬性的ModelMetadata之後(還不知道怎麼擷取ModelMetadata的童鞋請自行惡補),我們可以輕松得到一些我們在模型中定義的特性,比如顯示名稱、是否隻讀、是否必須、注釋、資料類型等,但是并不包括Range和StringLength這兩個需要驗證的特性,我把ModelMetadata對象翻個底朝天也沒找到設定的值。

于是乎,隻能通過反射來擷取特性的定義資訊了,以下代碼能夠擷取到該屬性定義的所有特性:

然後我們周遊之,尋找我們要的類型,這裡以Range為例:

<a></a>

代碼中首先判斷類型是否一緻,接着判斷第一個構造參數是否不為Type類型(Range特性有三個構造函數,其中第一個參數為Type類型的max和min值可以是任何類型,在這裡我們不需處理這個構造函數的資料,隻對另外兩種傳輸int或double的構造函數感興趣)。

然後就可以取值了:

這裡我們需要double類型的值,是以不管傳入的是int還是double類型參數,統一使用轉換的方式轉換為double。

這樣我們就可以在發往用戶端頁面中進行基本的限制了:

同理可以取來StringLength的資訊用來限制文本輸入框的可輸入字元長度:

還可以結合JS寫一些自定義的用戶端驗證。

服務端的模型驗證不用我們操心,這兩個特性會在驗證時正确觸發的。

使用這個技巧,你還可以實作一些自定義的特性,以控制用戶端的頁面功能。

本文轉自斯克迪亞部落格園部落格,原文連結:http://www.cnblogs.com/SkyD/p/4053458.html,如需轉載請自行聯系原作者

繼續閱讀