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

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

ASP.NETMVCModel驗(yàn)證(二)-創(chuàng)新互聯(lián)

ASP.NET MVC Model驗(yàn)證(二)

前言

上篇內(nèi)容演示了一個(gè)簡(jiǎn)單的Model驗(yàn)證示例,然后在文中提及到Model驗(yàn)證在MVC框架中默認(rèn)所處的位置在哪?本篇就是來(lái)解決 這個(gè)問(wèn)題的,并且會(huì)描述一下ModelValidator類型對(duì)象相關(guān)的類型。

在東勝等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè) 網(wǎng)站設(shè)計(jì)制作按需求定制開(kāi)發(fā),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),成都營(yíng)銷網(wǎng)站建設(shè),外貿(mào)網(wǎng)站建設(shè),東勝網(wǎng)站建設(shè)費(fèi)用合理。

Model驗(yàn)證

  • Model驗(yàn)證簡(jiǎn)單運(yùn)用示例

  • ModelValidator使用生成過(guò)程

  • 自定義實(shí)現(xiàn)DefaultModelBinder進(jìn)行驗(yàn)證

  • 自定義ModelValidatorProvider 和ModelValidator 

  • ValidationAttribute特性類使用

  • 自定義ValidationAttribute特性類的示例實(shí)現(xiàn)

ModelValidator使用生成過(guò)程

首先請(qǐng)?jiān)试S我“盜”一張圖,這個(gè)示意圖是在我前面篇幅的ASP.NET MVC Model綁定(二)中的一張圖。

圖1

ASP.NET MVC Model驗(yàn)證(二)

為什么要“盜”這個(gè)圖1,因?yàn)镸odel驗(yàn)證的過(guò)程將是在這個(gè)圖中的某個(gè)位置,對(duì)于這個(gè)示意圖的意思我就不詳細(xì) 說(shuō)明了,只說(shuō)明一下藍(lán)色線條部分,那是Model綁定器生成部分,我們需要的也是這個(gè)部分。看下圖2

圖2

ASP.NET MVC Model驗(yàn)證(二)

圖2的部分也是圖1中的,這樣一步步的分解下來(lái),讓大家有個(gè)由大到小的由遠(yuǎn)到近的層次感,便于記憶和留下印象。這里有 的朋友會(huì)說(shuō)了這是Model綁定部分拉過(guò)來(lái)有什么用?這個(gè)是有用的,看一下【IModelBinder.BindModel()】這個(gè)部分到【獲取控 制器方法參數(shù)值】部分,也就是整個(gè)Model綁定的過(guò)程了,主題是Model驗(yàn)證又扯綁定了,沒(méi)辦法阿,因?yàn)樵贛odel綁定之前會(huì)進(jìn) 行Model驗(yàn)證。

在我們沒(méi)有自定義Model綁定器的時(shí)候,系統(tǒng)默認(rèn)實(shí)現(xiàn)的都是DefaultModelBinder類型,那么我就來(lái)看一 下DefaultModelBinder類型的內(nèi)部的具體實(shí)現(xiàn)吧。。。

開(kāi)個(gè)玩笑,是看一下內(nèi)部實(shí)現(xiàn)不過(guò)不是源碼而是示意圖(圖3),這樣給大家留個(gè)印象,感興趣的自己去扒源碼看吧。

圖3

ASP.NET MVC Model驗(yàn)證(二)

感覺(jué)是不是有點(diǎn)坑,別急大家,坑誰(shuí)不敢坑你們,實(shí)際上還有一條流程這里沒(méi)有顯示,這里顯示就是綁定復(fù)雜類型的Model所 要執(zhí)行的內(nèi)部方法。而在BindComplexModel)(方法內(nèi)部的實(shí)現(xiàn)里才會(huì)進(jìn)行Model驗(yàn)證,我們看一下方法的內(nèi)部執(zhí)行示意圖(圖4) 。

圖4

ASP.NET MVC Model驗(yàn)證(二)

長(zhǎng)話短說(shuō),執(zhí)行Model驗(yàn)證的過(guò)程是先執(zhí)行Model中的屬性級(jí)驗(yàn)證,然后執(zhí)行Model級(jí)驗(yàn)證。

在BindComplexElementalModel()方法中,首先會(huì)執(zhí)行BindProperties()方法,在此方法內(nèi)部會(huì)遍歷PropertyDescriptor集合 類型(圖4中顯示PropertyDescriptorCollection是不足的地方),正如大家所看到的一樣,SetProperty()方法才是最后真正對(duì) Model屬性進(jìn)行驗(yàn)證的函數(shù)(下個(gè)篇幅會(huì)有講解實(shí)現(xiàn)自定義的Model綁定器執(zhí)行Model驗(yàn)證會(huì)講到這個(gè)方法)。

而在SetProperty()方法中真正執(zhí)行驗(yàn)證的,可以是自定義的,當(dāng)然了系統(tǒng)默認(rèn)的就是從 ModelValidatorProviders.Providers中獲取的了,所有驗(yàn)證的后的錯(cuò)誤信息(假使有)都存在了ModelBindingContext類型的參數(shù)中了,以此向下傳遞。

驗(yàn)證完Model屬性后則會(huì)驗(yàn)證Model本身,就會(huì)調(diào)用OnModelUpdated()方法,這個(gè)方法有個(gè)毛病,就是自己不干 活,在它內(nèi)部使用CompositeModelValidator類型的實(shí)例來(lái)進(jìn)行驗(yàn)證,不過(guò)驗(yàn)證最后使用的還是 ModelValidatorProviders.Providers中我們自定義的ModelValidator類型或者是默認(rèn)的(這里具體的細(xì)節(jié)本人也沒(méi)有去細(xì)看, 大概的流程是這樣如果有誤差請(qǐng)指正,感激不盡)。

最后我們說(shuō)一下ModelValidator類型的注冊(cè),首先系統(tǒng)是不認(rèn)它的,它可能不是“親 生”的。系統(tǒng)的ModelValidatorProviders類型中的Providers屬性是ModelValidatorProviderCollection類型的,這下大 家應(yīng)該看到系統(tǒng)認(rèn)誰(shuí)了吧,就是認(rèn)識(shí)ModelValidator類型的“爹”ModelValidatorProvider類型 (畢竟不是繼承關(guān)系),這里就不多說(shuō)相關(guān)的模型了,跟前面好多的模型都相像。

對(duì)于自定義實(shí)現(xiàn)ModelValidator類型的示例演示在后續(xù)的篇幅中會(huì)有講到。

創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國(guó)云服務(wù)器,動(dòng)態(tài)BGP最優(yōu)骨干路由自動(dòng)選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡(luò)助力業(yè)務(wù)部署。公司持有工信部辦法的idc、isp許可證, 機(jī)房獨(dú)有T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確進(jìn)行流量調(diào)度,確保服務(wù)器高可用性。佳節(jié)活動(dòng)現(xiàn)已開(kāi)啟,新人活動(dòng)云服務(wù)器買多久送多久。


分享標(biāo)題:ASP.NETMVCModel驗(yàn)證(二)-創(chuàng)新互聯(lián)
網(wǎng)站路徑:http://weahome.cn/article/jcdog.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部