
?。?)處理流程
在傳統的WebForm模式下,我們請求一個(gè)例如http://www.aspnetmvc.com/blog/index.aspx的URL,那么我們的WebForm程序會(huì )到網(wǎng)站根目錄下去尋找blog目錄下的index.aspx文件,然后由index.aspx頁(yè)面的CodeBehind文件(.CS文件)進(jìn)行邏輯處理,其中或許也包括到數據庫去取出數據(其中的經(jīng)過(guò)怎樣的BLL到DAL這里就不談了),然后再由index.aspx頁(yè)面來(lái)呈現給用戶(hù)。
綜上所述,在WebForm模式下:一個(gè)URL請求的是在服務(wù)器與該URL對應路徑上的物理文件(ASPX文件或其他),然后由該文件來(lái)處理這個(gè)請求并返回結果給客戶(hù)端。
?。?)開(kāi)發(fā)方式

?。?)處理流程
在A(yíng)SP.Net MVC中,客戶(hù)端所請求的URL是被映射到相應的Controller去,然后由Controller來(lái)處理業(yè)務(wù)邏輯,或許要從Model中取數據,然后再由Controller選擇合適的View返回給客戶(hù)端。再說(shuō)回前面我們運行的ASP.NET MVC程序訪(fǎng)問(wèn)的http://www.aspnetmvc.com/Home/Index這個(gè)URL,它訪(fǎng)問(wèn)的其實(shí)是HomeController中的Index這個(gè)Action。
?。?)顯著(zhù)特點(diǎn)
V:View 是用戶(hù)接口層組件。主要是將Model中的數據展示給用戶(hù)。aspx和ascx文件被用來(lái)處理視圖的職責;



可以看出,對于MVC的兩種不同理解的區別就在于對于Model的理解上:將Model作為業(yè)務(wù)模型(BLL、DAL等)還是作為視圖模型(ViewModel)。

?。?)WebForm
優(yōu)點(diǎn): 1.提供了大量的服務(wù)器端控件,可以實(shí)現快速開(kāi)發(fā);
2.ViewState回傳數據很方便;
3.學(xué)習成本低;
缺點(diǎn): 1. 封裝太強,雖然學(xué)習成本低,很多底層東西讓初學(xué)者不是很明白;
2. 自定義控制不靈活,不利于美工和開(kāi)發(fā)人員的配合,往往那些服務(wù)器控件處理稍有不慎就會(huì )導致出錯;
3. ViewState在頁(yè)面中的傳遞會(huì )造成大量的流量消耗;
TIP:有關(guān)WebForm的服務(wù)器控件和ViewState的詳細介紹,不了解的朋友可以閱讀另一篇博文《ASP.Net WebForm學(xué)習筆記:aspx與服務(wù)器控件探秘》。
?。?)MVC
優(yōu)點(diǎn): 1.很容易將復雜的應用分成Model(ViewModel)、View、Controller三個(gè)組件模型,將處理后臺邏輯代碼與前臺展示邏輯進(jìn)行了很好的分離,屬于松耦合關(guān)系,在大項目應用中,更易于敏捷開(kāi)發(fā)與測試驅動(dòng)開(kāi)發(fā),有很強的可擴展性;
2.因為沒(méi)有服務(wù)器端控件,所以程序員控制的會(huì )更加靈活,頁(yè)面更加干凈,沒(méi)有ViewState;
3.通過(guò)修改路由規則,可以控制生成自定義的url,因此控制生成SEO友好的URL將更加容易;
4.強類(lèi)型View實(shí)現、Razor視圖、Model綁定機制、Model的驗證機制,更安全高效;
缺點(diǎn): 學(xué)習成本高,結構復雜,對未變化數據的不必要的頻繁訪(fǎng)問(wèn),也將損害操作性能。
?。?)新建一個(gè)ASP.Net MVC 4項目,選擇“基本”配置與“ASPX”視圖引擎(暫時(shí)不用Razor引擎)。
?。?)VS為我們生成的基本文件組織結構如下圖所示:

可以看出,VS默認幫我們創(chuàng )建好了Models、Views以及Controllers的三個(gè)文件夾,這三個(gè)文件夾就構成了我們的ASP.Net MVC模式的項目。其中,Controllers是所有控制器的類(lèi)文件所在,而Models則是所有模型的類(lèi)文件所在,而Views則是所有cshtml或aspx的文件所在。
在Controllers中新建一個(gè)控制器,取名為HomeController。在默認的Index這個(gè)Action中新建一個(gè)視圖,默認名為Index即可。





PS:ViweBag其實(shí)是就一個(gè)包含了一層Dynamic的ViewData,兩個(gè)兄弟共用的是一個(gè)容器。
聯(lián)系客服