第三章 Models详解
摘自:http://www.cnblogs.com/xdotnet/archive/2012/03/07/aspnet_mvc40_validate.html
Model的概念
萬丈高樓平地起,先理解概念才能更好的使用。
百度百科的解說:在MVC(模型Model-視圖View-控制器Controller)模式中,Model代表模型,是業務流程/狀態的處理以及業務規則的制定,接受視圖請求的數據,并返回最終的處理結果。
數據是由Model提供的,但不是指局部變量、全局變量或常數這樣的數據,而是指程序外部所提供的數據。外部數據,包含數據庫、文件、web service等,都是可以算是model。
Model的類型
按ASP.NET MVC的分類方法:DomainModel、ViewModel、InputModel
按領域驅動設計,分為三類:entity、ValueObject、Service (程序和動作)
Model驗證
了解了這些就可以對MVC進一步認識,相信很多人都對MVC中三個模塊有一定的認識。今天我們主要來看一下Models模塊,這個和我們三層里用的 實體類有點相似,不同的是這里的屬性需要添加一些驗證屬性(Attribute)或其他的一些Filter(過濾器)。在MVC中驗證屬性主要包含在 System.ComponentModel.DataAnnotations.dll程序集中,所以需要對其添加引用。
?
首先我們先看一下注冊模型的代碼,然后對其中使用到的驗證屬性等進行進一步的認識,代碼如下。
?1?public?class?RegisterModel?2?????{
?3?????????[Required]
?4?????????[Display(Name?=?"User?name")]
?5?????????public?string?UserName?{?get;?set;?}
?6?
?7?????????[Required]
?8?????????[DataType(DataType.EmailAddress)]
?9?????????[Display(Name?=?"Email?address")]
10?????????public?string?Email?{?get;?set;?}
11?
12?????????[Required]
13?????????[StringLength(100,?ErrorMessage?=?"The?{0}?must?be?at?least?{2}?characters?long.",?MinimumLength?=?6)]
14?????????[DataType(DataType.Password)]
15?????????[Display(Name?=?"Password")]
16?????????public?string?Password?{?get;?set;?}
17?
18?????????[DataType(DataType.Password)]
19?????????[Display(Name?=?"Confirm?password")]
20?????????[Compare("Password",?ErrorMessage?=?"The?password?and?confirmation?password?do?not?match.")]
21?????????public?string?ConfirmPassword?{?get;?set;?}
?
一、RequiredAttribute屬性
?使用這個標記的屬性表示必須,如果客戶端返回的數據中沒有設置此項,則在ModelState.IsValid屬性將為false。錯誤信息將會包含在ModelState對象里,客戶端就可以通過@Html.ValidationMessageFor來顯示模型屬性驗證錯誤信息。讓我們打開VS11自帶的Internet Application項目,并使用Page Inspector來調試程序,雙擊注冊按鈕,我們就可以看到這個驗證的相關信息,如下圖所示。
?
?在圖中就可以看到這個注冊模型RequiredAttribute驗證標記的驗證信息,在input標記中的data-val-required 屬性呈現的是嚴重信息,這些屬性都是微軟擴展的供JQuery和其驗證擴展庫使用。如果你對客戶端驗證感興趣可以研究一下Scripts目錄下的 “jquery.validate.js”和“jquery.validate.unobtrusive.js”,這樣你就會知道他是如何工作的了。
?
二、DisplayAttribute屬性
?這個屬性主要用于前臺顯示時的字符串,比如注冊模型中的UserName屬性在前臺顯示的就是“User name”,從上面圖片中的HTML代碼中就可以看出來。當然我們也可以把它改成“用戶名”,這樣執行后就不會顯示英文了。
?
三、StringLengthAttribute屬性
?這個屬于驗證屬性,用于判斷當前屬性字符串長度,可以用設置最小值和最大值。這個比較少用,我做過的項目只有在密碼上回用這個,其他一般會給正則表達式進行驗證。
?
四、CompareAttribute屬性
?這個驗證屬性主要用于對比兩個屬性的值是否相同,一般用于密碼和確認密碼,因為這兩個是要一樣的。
?
五、RegularExpressionAttribute屬性?
?這個屬性將使用參數里設置的正則表達式來驗證當前屬性是否合法,這個我會比較常用,像用戶注冊等等都會對其進行驗證。
?
六、RangeAttribute屬性
?這個屬性為范圍區間驗證,可以是數字,也可以是對象,需要指定最小值和最大值,如果不是數字還需要指定對比的類型。
?
七、RemoteAttribute屬性
?這個屬性實現了遠處驗證,參數主要是設置服務端的控制器和方法名稱,比如我們的要驗證注冊模型中的UserName是否已經被注冊,就可以使用這個Remote屬性。
總結
以上是生活随笔為你收集整理的第三章 Models详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android 图片平铺实现方式
- 下一篇: 经典网页设计:18个示例展示图片在网页中