第三章 Models详解
摘自:http://www.cnblogs.com/xdotnet/archive/2012/03/07/aspnet_mvc40_validate.html
Model的概念
萬丈高樓平地起,先理解概念才能更好的使用。
百度百科的解說:在MVC(模型Model-視圖View-控制器Controller)模式中,Model代表模型,是業(yè)務(wù)流程/狀態(tài)的處理以及業(yè)務(wù)規(guī)則的制定,接受視圖請求的數(shù)據(jù),并返回最終的處理結(jié)果。
數(shù)據(jù)是由Model提供的,但不是指局部變量、全局變量或常數(shù)這樣的數(shù)據(jù),而是指程序外部所提供的數(shù)據(jù)。外部數(shù)據(jù),包含數(shù)據(jù)庫、文件、web service等,都是可以算是model。
Model的類型
按ASP.NET MVC的分類方法:DomainModel、ViewModel、InputModel
按領(lǐng)域驅(qū)動設(shè)計,分為三類:entity、ValueObject、Service (程序和動作)
Model驗證
了解了這些就可以對MVC進一步認(rèn)識,相信很多人都對MVC中三個模塊有一定的認(rèn)識。今天我們主要來看一下Models模塊,這個和我們?nèi)龑永镉玫?實體類有點相似,不同的是這里的屬性需要添加一些驗證屬性(Attribute)或其他的一些Filter(過濾器)。在MVC中驗證屬性主要包含在 System.ComponentModel.DataAnnotations.dll程序集中,所以需要對其添加引用。
?
首先我們先看一下注冊模型的代碼,然后對其中使用到的驗證屬性等進行進一步的認(rèn)識,代碼如下。
?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屬性
?使用這個標(biāo)記的屬性表示必須,如果客戶端返回的數(shù)據(jù)中沒有設(shè)置此項,則在ModelState.IsValid屬性將為false。錯誤信息將會包含在ModelState對象里,客戶端就可以通過@Html.ValidationMessageFor來顯示模型屬性驗證錯誤信息。讓我們打開VS11自帶的Internet Application項目,并使用Page Inspector來調(diào)試程序,雙擊注冊按鈕,我們就可以看到這個驗證的相關(guān)信息,如下圖所示。
?
?在圖中就可以看到這個注冊模型RequiredAttribute驗證標(biāo)記的驗證信息,在input標(biāo)記中的data-val-required 屬性呈現(xiàn)的是嚴(yán)重信息,這些屬性都是微軟擴展的供JQuery和其驗證擴展庫使用。如果你對客戶端驗證感興趣可以研究一下Scripts目錄下的 “jquery.validate.js”和“jquery.validate.unobtrusive.js”,這樣你就會知道他是如何工作的了。
?
二、DisplayAttribute屬性
?這個屬性主要用于前臺顯示時的字符串,比如注冊模型中的UserName屬性在前臺顯示的就是“User name”,從上面圖片中的HTML代碼中就可以看出來。當(dāng)然我們也可以把它改成“用戶名”,這樣執(zhí)行后就不會顯示英文了。
?
三、StringLengthAttribute屬性
?這個屬于驗證屬性,用于判斷當(dāng)前屬性字符串長度,可以用設(shè)置最小值和最大值。這個比較少用,我做過的項目只有在密碼上回用這個,其他一般會給正則表達式進行驗證。
?
四、CompareAttribute屬性
?這個驗證屬性主要用于對比兩個屬性的值是否相同,一般用于密碼和確認(rèn)密碼,因為這兩個是要一樣的。
?
五、RegularExpressionAttribute屬性?
?這個屬性將使用參數(shù)里設(shè)置的正則表達式來驗證當(dāng)前屬性是否合法,這個我會比較常用,像用戶注冊等等都會對其進行驗證。
?
六、RangeAttribute屬性
?這個屬性為范圍區(qū)間驗證,可以是數(shù)字,也可以是對象,需要指定最小值和最大值,如果不是數(shù)字還需要指定對比的類型。
?
七、RemoteAttribute屬性
?這個屬性實現(xiàn)了遠處驗證,參數(shù)主要是設(shè)置服務(wù)端的控制器和方法名稱,比如我們的要驗證注冊模型中的UserName是否已經(jīng)被注冊,就可以使用這個Remote屬性。
總結(jié)
以上是生活随笔為你收集整理的第三章 Models详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android 图片平铺实现方式
- 下一篇: 经典网页设计:18个示例展示图片在网页中