内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

ASP.NET沒有魔法_ASP.NETMVC模型驗(yàn)證的示例分析-創(chuàng)新互聯(lián)

這篇文章主要介紹了ASP.NET沒有魔法_ASP.NET MVC模型驗(yàn)證的示例分析,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),榕城企業(yè)網(wǎng)站建設(shè),榕城品牌網(wǎng)站建設(shè),網(wǎng)站定制,榕城網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,榕城網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。

在注冊(cè)用戶時(shí)可以通過代碼的形式限制用戶名及密碼的格式,如果不符合要求那么就無法完成操作,如下圖:

ASP.NET沒有魔法_ASP.NET MVC模型驗(yàn)證的示例分析

該功能的原理是Identity基于的Entity Framework組件在添加用戶之前對(duì)用戶提交數(shù)據(jù)進(jìn)行校驗(yàn)后給出的錯(cuò)誤信息。  

數(shù)據(jù)校驗(yàn)功能在每一個(gè)軟件系統(tǒng)中都是非常必要的,為了避免用戶輸入無效或非法數(shù)據(jù)導(dǎo)致的系統(tǒng)錯(cuò)誤,需要在數(shù)據(jù)進(jìn)行處理或持久化之前對(duì)其進(jìn)行驗(yàn)證確保數(shù)據(jù)的正確、有效性。

本文將從以下幾點(diǎn)來介紹ASP.NET MVC中的模型驗(yàn)證機(jī)制:  

● 輸入驗(yàn)證

● .NET 的驗(yàn)證簡(jiǎn)介

● ASP.NET MVC的后端模型驗(yàn)證

● ASP.NET MVC的客戶端模型驗(yàn)證

● 關(guān)于ASP.NET MVC的客戶端驗(yàn)證

● 自定義ASP.NET MVC中的模型驗(yàn)證

輸入驗(yàn)證

輸入驗(yàn)證的目的就是用來判斷一個(gè)變量是否能夠滿足規(guī)定的要求,這里既然提到了“判斷”那么使用程序來實(shí)現(xiàn)時(shí)最直接的方式就是通過判斷語(yǔ)句來完成,如:

ASP.NET沒有魔法_ASP.NET MVC模型驗(yàn)證的示例分析

但是在.Net中是否有一種統(tǒng)一的方式來實(shí)現(xiàn)數(shù)據(jù)的驗(yàn)證呢?否則每次通過判斷語(yǔ)句來寫驗(yàn)證代碼既不能重用又影響閱讀。

.NET 的驗(yàn)證簡(jiǎn)介

在.Net中提供了一種基于特性的數(shù)據(jù)類型標(biāo)記(DataAnnotations)、驗(yàn)證機(jī)制。

1、數(shù)據(jù)類型的標(biāo)記:

.Net中有一個(gè)名為system.componentmodel.dataannotations的類庫(kù),里面包含了很多特性(Attribute)。這些特性用于標(biāo)記.Net類型中的屬性的數(shù)據(jù)類型信息。比如數(shù)據(jù)長(zhǎng)度、格式、能否為空等等?! ?/p>

下圖為該類庫(kù)中的部分類型,從中可以看到如信用卡、郵件地址、較大/最小長(zhǎng)度等特性類型:

ASP.NET沒有魔法_ASP.NET MVC模型驗(yàn)證的示例分析

數(shù)據(jù)標(biāo)記特性(Data Annotation attributes)有三種類型,分別是:  

● 驗(yàn)證特性:用于執(zhí)行驗(yàn)證規(guī)則,如郵箱地址、數(shù)據(jù)類型、數(shù)據(jù)長(zhǎng)度、數(shù)字區(qū)間、正則表達(dá)式等驗(yàn)證特性。

● 展示特性:用于指定被標(biāo)記的類型或?qū)傩匀绾卧赨I上展示。

● 模型關(guān)系特性:用于指定類成員與其它類型的關(guān)系,如外鍵特性等。

下圖是通過特性對(duì)一個(gè)實(shí)體類型的name屬性進(jìn)行標(biāo)記的結(jié)果,從標(biāo)記的名稱可以輕易看出該name屬性是必填的并且較大長(zhǎng)度為30,展示的名稱為“名稱”。

ASP.NET沒有魔法_ASP.NET MVC模型驗(yàn)證的示例分析

但需要注意的是system.componentmodel.dataannotations所提供的特性僅僅是一種描述,它不會(huì)因?yàn)槟阆拗屏艘粋€(gè)字符串的長(zhǎng)度就無法給它賦值超出限制的字符串,它必須手動(dòng)調(diào)用驗(yàn)證方法或者在ASP.NET MVC、EF中使用。(可參考:https://stackoverflow.com/questions/6496705/how-do-data-annotations-work)   

關(guān)于dataannotations提供的特性類型可參考:https://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.aspx

2、數(shù)據(jù)類型的驗(yàn)證

當(dāng)使用數(shù)據(jù)特性標(biāo)記對(duì)類型完成標(biāo)記后,還需要通過專門的驗(yàn)證類型才可以完成驗(yàn)證,該類型同樣存在于system.componentmodel.dataannotations程序集中名為Validator,下圖是Validator的定義,從其描述來看該類用于對(duì)使用ValidationAttribute特性標(biāo)記的類型、屬性、方法進(jìn)行驗(yàn)證:

ASP.NET沒有魔法_ASP.NET MVC模型驗(yàn)證的示例分析

3、類型驗(yàn)證示例

通過一個(gè)Console程序來演示如何使用.Net中的數(shù)據(jù)驗(yàn)證:  

首先創(chuàng)建一個(gè)Console程序,并添加System.ComponentModel.DataAnnotations程序集的引用,然后編寫以下代碼:

ASP.NET沒有魔法_ASP.NET MVC模型驗(yàn)證的示例分析

運(yùn)行后將輸出以下錯(cuò)誤信息:

ASP.NET沒有魔法_ASP.NET MVC模型驗(yàn)證的示例分析

添加顯示特性后:

ASP.NET沒有魔法_ASP.NET MVC模型驗(yàn)證的示例分析

優(yōu)化了驗(yàn)證提示信息:

ASP.NET沒有魔法_ASP.NET MVC模型驗(yàn)證的示例分析

4、自定義驗(yàn)證方式:

系統(tǒng)內(nèi)置的數(shù)據(jù)驗(yàn)證特性均是繼承至ValidationAttribute類型,下面就通過繼承該類型來實(shí)現(xiàn)一個(gè)自己的數(shù)據(jù)驗(yàn)證方式:  

首先添加一個(gè)繼承ValidationAttribute的類型,并重寫其IsValid方法,該方法中包含數(shù)據(jù)驗(yàn)證的邏輯,并設(shè)置相應(yīng)的錯(cuò)誤信息:

ASP.NET沒有魔法_ASP.NET MVC模型驗(yàn)證的示例分析

然后在相應(yīng)的類屬性上應(yīng)用該特性:

ASP.NET沒有魔法_ASP.NET MVC模型驗(yàn)證的示例分析

驗(yàn)證結(jié)果:

ASP.NET沒有魔法_ASP.NET MVC模型驗(yàn)證的示例分析

關(guān)于自定義驗(yàn)證特性可參考:https://msdn.microsoft.com/en-us/library/cc668224.aspx

ASP.NET MVC的模型驗(yàn)證

ASP.NET MVC中提供了基于特性標(biāo)記的模型驗(yàn)證的功能,既只要在用做action參數(shù)的類型屬性上添加對(duì)應(yīng)的數(shù)據(jù)驗(yàn)證特性,那么ASP.NET MVC在進(jìn)行模型綁定時(shí)就會(huì)自動(dòng)對(duì)被標(biāo)記的屬性進(jìn)行驗(yàn)證。驗(yàn)證的結(jié)果通過Controller中的ModelState的IsValid屬性體現(xiàn)?! ?/p>

下面就介紹如何在ASP.NET MVC中為Model添加數(shù)據(jù)驗(yàn)證:

1.使用特性為Model的屬性進(jìn)行標(biāo)記,如必填、密碼類型及屬性間的比較等:

ASP.NET沒有魔法_ASP.NET MVC模型驗(yàn)證的示例分析

2.在Action代碼中添加ModelState.IsValid判斷,當(dāng)出現(xiàn)錯(cuò)誤時(shí),將錯(cuò)誤信息通過ModelState對(duì)象的AddModelError方法攜帶至View中:

ASP.NET沒有魔法_ASP.NET MVC模型驗(yàn)證的示例分析

ASP.NET沒有魔法_ASP.NET MVC模型驗(yàn)證的示例分析

3、在View中使用Html.ValidationSummary方法輸出驗(yàn)證信息:

ASP.NET沒有魔法_ASP.NET MVC模型驗(yàn)證的示例分析

注:如果View中有用于客戶端驗(yàn)證的代碼需要先注釋掉@Scripts.Render("~/bundles/jqueryval"),該文件用于客戶端驗(yàn)證,客戶端驗(yàn)證在后面介紹。

ASP.NET沒有魔法_ASP.NET MVC模型驗(yàn)證的示例分析

4、在頁(yè)面上使用Html對(duì)象根據(jù)模型生成對(duì)應(yīng)的html標(biāo)簽

ASP.NET沒有魔法_ASP.NET MVC模型驗(yàn)證的示例分析

5、運(yùn)行程序

輸入空的用戶名和不匹配的兩個(gè)密碼,點(diǎn)擊提交后:

ASP.NET沒有魔法_ASP.NET MVC模型驗(yàn)證的示例分析

顯示驗(yàn)證未通過:

ASP.NET沒有魔法_ASP.NET MVC模型驗(yàn)證的示例分析

頁(yè)面上輸出的內(nèi)容:

ASP.NET沒有魔法_ASP.NET MVC模型驗(yàn)證的示例分析

6、使用display特性來優(yōu)化屬性名稱的輸出:

ASP.NET沒有魔法_ASP.NET MVC模型驗(yàn)證的示例分析

執(zhí)行結(jié)果:

ASP.NET沒有魔法_ASP.NET MVC模型驗(yàn)證的示例分析

ASP.NET MVC的客戶端模型驗(yàn)證

前面介紹的是ASP.NET MVC服務(wù)端的模型驗(yàn)證,當(dāng)數(shù)據(jù)提交到服務(wù)器時(shí)進(jìn)行驗(yàn)證的方式,雖然能夠在業(yè)務(wù)邏輯之前過濾數(shù)據(jù)無效的請(qǐng)求,但是仍然需要將請(qǐng)求發(fā)送到服務(wù)器,當(dāng)請(qǐng)求過多時(shí)這些無效的請(qǐng)求會(huì)占用大量的服務(wù)器資源,所以如果能夠在客戶端完成相應(yīng)的驗(yàn)證,那么對(duì)于客戶來說提升了響應(yīng)速度,而對(duì)于服務(wù)器來說減少了壓力,ASP.NET MVC就結(jié)合Jquery Validation插件提供了瀏覽器端的數(shù)據(jù)驗(yàn)證功能?! ?/p>

接下來就在上面代碼的基礎(chǔ)上,通過在頁(yè)面中引入驗(yàn)證相關(guān)javascript實(shí)現(xiàn)在客戶端驗(yàn)證:  

1、添加以下代碼,引入驗(yàn)證相關(guān)Js代碼:

ASP.NET沒有魔法_ASP.NET MVC模型驗(yàn)證的示例分析

2、使用Html對(duì)象的ForXXX方法在View上生成Model對(duì)應(yīng)標(biāo)記的Html代碼:

ASP.NET沒有魔法_ASP.NET MVC模型驗(yàn)證的示例分析

3、運(yùn)行效果:

ASP.NET沒有魔法_ASP.NET MVC模型驗(yàn)證的示例分析

結(jié)果與服務(wù)端驗(yàn)證一致,但是點(diǎn)擊注冊(cè)按鈕時(shí)不再去發(fā)送Post請(qǐng)求到服務(wù)器,而是通過js代碼在瀏覽器完成的數(shù)據(jù)驗(yàn)證。

關(guān)于ASP.NET MVC的客戶端驗(yàn)證Jquery Validation

Jquery Validation是一個(gè)Jquery的插件,它提供了強(qiáng)大的表單數(shù)據(jù)驗(yàn)證功能,可以簡(jiǎn)單快速的為Web應(yīng)用添加一些常用的數(shù)據(jù)驗(yàn)證,如必填、數(shù)字、郵箱、電話號(hào)碼、正則表達(dá)式等常用格式驗(yàn)證?! ∷尿?yàn)證功能是通過在表單的標(biāo)簽中添加一些屬性或設(shè)置其類型來完成的,如下圖所示,該代碼來自官方文檔,它提供了長(zhǎng)度限制、必填、Email格式、Url格式的驗(yàn)證:

ASP.NET沒有魔法_ASP.NET MVC模型驗(yàn)證的示例分析

更多關(guān)于Jquery Validation的內(nèi)容可參考文檔:https://jqueryvalidation.org/documentation/

Unobtrusive Javascript

Unobtrusive Javascript可以譯為非侵入式的Javascript,其目的就是為了分離HTML和Javascript,換句話說HTML中沒有JavaScript代碼,它們只有引用關(guān)系。這樣做既可以避免代碼混亂,又可以避免不同瀏覽器之間的兼容問題?! ?/p>

而ASP.NET MVC是通過在HTML中的標(biāo)簽上插入data-val*等屬性,對(duì)相應(yīng)的標(biāo)簽進(jìn)行標(biāo)記,然后引入的js通過讀取這些特殊標(biāo)記來完成特定的功能,以下是通過Html.TextBoxFor方法生成HTML:

ASP.NET沒有魔法_ASP.NET MVC模型驗(yàn)證的示例分析

從代碼中可以看到除了input標(biāo)簽正常的屬性外還生成了data-val為前綴的相關(guān)屬性,這些屬性將用于輔助js代碼完成數(shù)據(jù)驗(yàn)證。

關(guān)于@Scripts.Render("~/bundles/jqueryval"):

首先Scripts對(duì)象的Render方法是用于將指定的腳本文件路徑添加到頁(yè)面中,而它的參數(shù)是一個(gè)字符串?dāng)?shù)組代表腳本文件的路徑?! ?/p>

那么~/bundles/jqueryval指向的是哪個(gè)文件呢? 

在ASP.NET MVC中提供了一個(gè)bundle的技術(shù),它可以用來合并和壓縮JavaScript和css文件,bundle的配置一般在App_Start目錄下的BundleConfig.cs文件下,從下圖的代碼中就可以看出,~/bundles/jqueryval代表了能夠被jquery.validate*匹配的所有文件:

ASP.NET沒有魔法_ASP.NET MVC模型驗(yàn)證的示例分析

然后向注冊(cè)路由一樣將其注冊(cè)到一個(gè)全局靜態(tài)Bundle列表中:

ASP.NET沒有魔法_ASP.NET MVC模型驗(yàn)證的示例分析

這樣在UI上就可以使用~/bundles/jqueryval來獲取到與驗(yàn)證相關(guān)的js文件,更多關(guān)于UI的內(nèi)容將在后續(xù)文章中介紹。

自定義ASP.NET MVC中的模型驗(yàn)證

上面介紹了ASP.NET MVC中的模型驗(yàn)證,其內(nèi)置了一些常用的驗(yàn)證方式,但是在實(shí)際開發(fā)中仍然會(huì)出現(xiàn)無法滿足需求的情況,所以在這些情況下就需要根據(jù)實(shí)際需求來自定義驗(yàn)證,包括后端驗(yàn)證與前端驗(yàn)證?! ?/p>

1、添加自定義驗(yàn)證特性:

ASP.NET沒有魔法_ASP.NET MVC模型驗(yàn)證的示例分析

上面代碼需要注意以下幾點(diǎn): 

● 實(shí)現(xiàn)了ValidationAttribute類型并重寫了用于獲取錯(cuò)誤信息的FormatErrorMessage方法以及用于驗(yàn)證數(shù)據(jù)的IsValid方法?! ?/p>

● 實(shí)現(xiàn)了System.Web.Mvc命名空間下的IClientValidatable接口,該接口是ASP.NET MVC拓展的用于實(shí)現(xiàn)客戶端驗(yàn)證的接口,該接口用于創(chuàng)建并返回一個(gè)驗(yàn)證規(guī)則列表,該驗(yàn)證規(guī)則主要包含了錯(cuò)誤信息、驗(yàn)證類型、驗(yàn)證參數(shù)三個(gè)屬性,其中錯(cuò)誤信息在默認(rèn)的信息中添加了“來自客戶端驗(yàn)證”用于區(qū)分服務(wù)端驗(yàn)證。

ASP.NET沒有魔法_ASP.NET MVC模型驗(yàn)證的示例分析

注:由于客戶端驗(yàn)證僅僅是ASP.NET MVC中的特性,所以IClientValidatable接口存在與System.Web.Mvc程序集中。

2、拓展Jquery Validation插件,添加一個(gè)名為myblog.validate.extension.js的驗(yàn)證拓展文件,并對(duì)Jquery validation添加新的驗(yàn)證方法(注:方法第一個(gè)參數(shù)與GetClientValidationRules方法中設(shè)置的ValidationType屬性一致),最后通過jQuery.validator.unobtrusive.adapters添加MVC與Jquery Validation的關(guān)聯(lián):

ASP.NET沒有魔法_ASP.NET MVC模型驗(yàn)證的示例分析

注:添加關(guān)聯(lián)代碼時(shí)需要添加名稱與ValidationType屬性一致的messages及rules。   

3、將拓展的js文件引入頁(yè)面中:

bundleConfig.cs:

ASP.NET沒有魔法_ASP.NET MVC模型驗(yàn)證的示例分析

頁(yè)面代碼:

ASP.NET沒有魔法_ASP.NET MVC模型驗(yàn)證的示例分析

4、將新添加的特性應(yīng)用到相應(yīng)的類型屬性上:

ASP.NET沒有魔法_ASP.NET MVC模型驗(yàn)證的示例分析

5、執(zhí)行結(jié)果:

ASP.NET沒有魔法_ASP.NET MVC模型驗(yàn)證的示例分析

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“ASP.NET沒有魔法_ASP.NET MVC模型驗(yàn)證的示例分析”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司,,關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來學(xué)習(xí)!

網(wǎng)站名稱:ASP.NET沒有魔法_ASP.NETMVC模型驗(yàn)證的示例分析-創(chuàng)新互聯(lián)
URL網(wǎng)址:http://www.rwnh.cn/article48/cejoep.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供標(biāo)簽優(yōu)化、虛擬主機(jī)、Google外貿(mào)網(wǎng)站建設(shè)、響應(yīng)式網(wǎng)站小程序開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

綿陽(yáng)服務(wù)器托管
色达县| 贡觉县| 甘谷县| 栖霞市| 海门市| 定安县| 五家渠市| 阜阳市| 大丰市| 新干县| 平顺县| 肃宁县| 门头沟区| 改则县| 苍溪县| 邮箱| 镇宁| 喜德县| 瑞丽市| 永年县| 旺苍县| 东乌珠穆沁旗| 响水县| 南部县| 黄山市| 印江| 通化县| 五台县| 绥棱县| 阿拉尔市| 浦江县| 肇东市| 高阳县| 舒城县| 广丰县| 仁布县| 朔州市| 霍城县| 互助| 大关县| 平定县|