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

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

ASP.NET中MVC與WebForm的區(qū)別是什么

這篇文章給大家介紹ASP.NET中 MVC與WebForm的區(qū)別是什么,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。

目前創(chuàng)新互聯(lián)公司已為上千多家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)頁(yè)空間、綿陽(yáng)服務(wù)器托管、企業(yè)網(wǎng)站設(shè)計(jì)、瑪沁網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶(hù)導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶(hù)和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。

ASP.NET MVC與WebForm區(qū)別談

使用ASP.NET MVC框架,創(chuàng)建默認(rèn)項(xiàng)目,***直觀(guān)感覺(jué)就是地址都是Rewrite過(guò)的。對(duì)源碼和配置文件稍加分析不難看出,MVC使用了httpModules來(lái)攔截地址請(qǐng)求,具體用到了System.Web.Routing類(lèi)庫(kù)(MVC2中,MVC1怎么用的忘記了。)而這部分類(lèi)庫(kù)被包裝在.NET Framework3.5 SP1中,MVC2需要SP1支持也就理所當(dāng)然了。SP1提供的System.Web.Routing類(lèi)庫(kù)可以方便地進(jìn)行地址請(qǐng)求攔截,對(duì)編碼處理方面也很優(yōu)秀。UrlRoutingModule類(lèi)攔截請(qǐng)求,在這之前,Application_Start的時(shí)候,會(huì)給RouteTable的全局對(duì)象一個(gè)攔截的設(shè)置。而這個(gè)設(shè)置使用RouteCollection對(duì)象進(jìn)行保存,MVC對(duì)這個(gè)類(lèi)進(jìn)行了擴(kuò)展——RouteCollectionExtensions。這些可以不考慮,接下來(lái),當(dāng)用戶(hù)訪(fǎng)問(wèn)頁(yè)面時(shí),UrlRoutingModule類(lèi)攔截請(qǐng)求,在RouteTable中查看是否符合規(guī)則,符合的話(huà),就會(huì)調(diào)用MvcHandler,這個(gè)調(diào)用在httpHandlers配置節(jié)點(diǎn)被注冊(cè),條件是地址符合“*.mvc”規(guī)則。MvcHandler的ProcessRequest方法就會(huì)調(diào)用Controller來(lái)執(zhí)行。事實(shí)上整個(gè)過(guò)程都是黑盒子,用戶(hù)感覺(jué)不到。在Controller中某方法執(zhí)行后,返回結(jié)果,再進(jìn)入具體的aspx頁(yè)面。

分析了MVC的工作工程,就可以對(duì)比其與WebForm的區(qū)別了。我們知道,MVC模式的業(yè)務(wù)被放置到Controller中去執(zhí)行,而aspx頁(yè)面只負(fù)責(zé)顯示。那么在MVC中的業(yè)務(wù)實(shí)際執(zhí)行時(shí)間被提前到了HttpMolde中,而WebForm的請(qǐng)求只在httpHandler容器中被執(zhí)行。也就是說(shuō)MVC中Controller與View的分離是使用的ASP.Net請(qǐng)求管道隔離的,這樣的話(huà)無(wú)疑在不影響效率(一次請(qǐng)求,而Response.Redirect是二次請(qǐng)求)的情況下達(dá)成了代碼的邏輯層次的分離。

ASP.NET中 MVC與WebForm的區(qū)別是什么
圖1 MVC工作模型

MVC工作的優(yōu)點(diǎn)是顯然的,更加有利于理解分層邏輯,把握代碼的層次感。Controller到aspx頁(yè)面之間的過(guò)程,已經(jīng)被框架隔離。至于Controller或者View頁(yè)面與Model調(diào)用的過(guò)程,還是需要自己來(lái)把握。ASP.NET的MVC框架實(shí)現(xiàn)了Controller代碼的單獨(dú)管理。

而看WebForm開(kāi)發(fā)模型,則只在HttpHandler容器中執(zhí)行,對(duì)其進(jìn)行分層,在大的方面缺乏支持,而只能依靠邏輯上分離。并不是不能分離,而是由一定的局限性。HttpHandler的攔截,是跟訪(fǎng)問(wèn)后綴名有關(guān)的。當(dāng)請(qǐng)求一個(gè)頁(yè)面時(shí),那就是一個(gè)Handler,而WebForm模型實(shí)現(xiàn)顯示與邏輯分離,才有的是WinForm的事件驅(qū)動(dòng)。顯然,事件必須被注冊(cè)到頁(yè)面里,比如Button1_Click這樣的代碼。而在Button1_Click執(zhí)行之前,Page_Load方法會(huì)被執(zhí)行。

顯示代碼被寫(xiě)入Page_Load方法中,那么就會(huì)造成需要寫(xiě)額外的廢代碼,比如if (!Page.IsPostBack)這樣的判定。而在Button1_Click執(zhí)行后需要顯示的部分,則比較難處理,寫(xiě)出另一個(gè)方法,也是必須要在Button1_Click里調(diào)用的。替代的解決方案是使用Response.Redirect,在一個(gè)aspx頁(yè)面中處理邏輯,處理完就跳轉(zhuǎn)到另外一個(gè)顯示的頁(yè)面。這樣做的壞處是,在兩個(gè)頁(yè)面中數(shù)據(jù)很難共享,而跳轉(zhuǎn)是通過(guò)標(biāo)記302來(lái)實(shí)現(xiàn),因此多一次請(qǐng)求。而另外還可以通過(guò)Server.Execute,Server.Transfer或者Context.RewritePath這樣的處理方式,則兩個(gè)頁(yè)面轉(zhuǎn)換是在服務(wù)器端完成,可以共享數(shù)據(jù),可以說(shuō)和MVC框架的處理方式大同小異,缺點(diǎn)是需要手動(dòng)配置這些重新定向的屬性。

從以上分析可以看出,MVC框架具有很強(qiáng)的優(yōu)越性,而WebForm也不是一無(wú)是處,在簡(jiǎn)單的應(yīng)用中更加容易開(kāi)發(fā)。WebForm也是可以實(shí)現(xiàn)和MVC一樣的分層方式,只是處理時(shí)需要多寫(xiě)一些代碼而已。而我認(rèn)為,在用WebForm開(kāi)發(fā)分層遇到的***問(wèn)題是頁(yè)面與頁(yè)面之間數(shù)據(jù)的傳遞問(wèn)題,而掌握好WebForm中使用服務(wù)器端跳轉(zhuǎn)的應(yīng)用技巧(Server.Execute,Server.Transfer或者Context.RewritePath)進(jìn)行開(kāi)發(fā)就可以解決數(shù)據(jù)傳輸問(wèn)題,ASP.NET MVC與WebForm比較起來(lái),WebForm更容易理解,不會(huì)產(chǎn)生復(fù)雜的配置,也是一個(gè)很不錯(cuò)的選擇。

關(guān)于ASP.NET中 MVC與WebForm的區(qū)別是什么就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。


網(wǎng)頁(yè)名稱(chēng):ASP.NET中MVC與WebForm的區(qū)別是什么
標(biāo)題URL:http://weahome.cn/article/psipch.html

其他資訊

在線(xiàn)咨詢(xún)

微信咨詢(xún)

電話(huà)咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部