真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

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

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

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

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

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

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

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

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

● 輸入驗(yàn)證

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

但需要注意的是system.componentmodel.dataannotations所提供的特性僅僅是一種描述,它不會因?yàn)槟阆拗屏艘粋€字符串的長度就無法給它賦值超出限制的字符串,它必須手動調(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)記對類型完成標(biāo)記后,還需要通過專門的驗(yàn)證類型才可以完成驗(yàn)證,該類型同樣存在于system.componentmodel.dataannotations程序集中名為Validator,下圖是Validator的定義,從其描述來看該類用于對使用ValidationAttribute特性標(biāo)記的類型、屬性、方法進(jìn)行驗(yàn)證:

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

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

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

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

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

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

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)一個自己的數(shù)據(jù)驗(yàn)證方式:  

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

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ù)的類型屬性上添加對應(yīng)的數(shù)據(jù)驗(yàn)證特性,那么ASP.NET MVC在進(jìn)行模型綁定時就會自動對被標(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)錯誤時,將錯誤信息通過ModelState對象的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、在頁面上使用Html對象根據(jù)模型生成對應(yīng)的html標(biāo)簽

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

5、運(yùn)行程序

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

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

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

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

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

接下來就在上面代碼的基礎(chǔ)上,通過在頁面中引入驗(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對象的ForXXX方法在View上生成Model對應(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)擊注冊按鈕時不再去發(fā)送Post請求到服務(wù)器,而是通過js代碼在瀏覽器完成的數(shù)據(jù)驗(yàn)證。

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

Jquery Validation是一個Jquery的插件,它提供了強(qiáng)大的表單數(shù)據(jù)驗(yàn)證功能,可以簡單快速的為Web應(yīng)用添加一些常用的數(shù)據(jù)驗(yàn)證,如必填、數(shù)字、郵箱、電話號碼、正則表達(dá)式等常用格式驗(yàn)證?! ∷尿?yàn)證功能是通過在表單的標(biāo)簽中添加一些屬性或設(shè)置其類型來完成的,如下圖所示,該代碼來自官方文檔,它提供了長度限制、必填、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*等屬性,對相應(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對象的Render方法是用于將指定的腳本文件路徑添加到頁面中,而它的參數(shù)是一個字符串?dāng)?shù)組代表腳本文件的路徑。  

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

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

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

然后向注冊路由一樣將其注冊到一個全局靜態(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ā)中仍然會出現(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類型并重寫了用于獲取錯誤信息的FormatErrorMessage方法以及用于驗(yàn)證數(shù)據(jù)的IsValid方法?! ?/p>

● 實(shí)現(xiàn)了System.Web.Mvc命名空間下的IClientValidatable接口,該接口是ASP.NET MVC拓展的用于實(shí)現(xiàn)客戶端驗(yàn)證的接口,該接口用于創(chuàng)建并返回一個驗(yàn)證規(guī)則列表,該驗(yàn)證規(guī)則主要包含了錯誤信息、驗(yàn)證類型、驗(yàn)證參數(shù)三個屬性,其中錯誤信息在默認(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插件,添加一個名為myblog.validate.extension.js的驗(yàn)證拓展文件,并對Jquery validation添加新的驗(yàn)證方法(注:方法第一個參數(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)代碼時需要添加名稱與ValidationType屬性一致的messages及rules。   

3、將拓展的js文件引入頁面中:

bundleConfig.cs:

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

頁面代碼:

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)證的示例分析”這篇文章對大家有幫助,同時也希望大家多多支持創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司,,關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!


當(dāng)前標(biāo)題:ASP.NET沒有魔法_ASP.NETMVC模型驗(yàn)證的示例分析-創(chuàng)新互聯(lián)
轉(zhuǎn)載來于:http://weahome.cn/article/cejoep.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部