Asp.Net MVC3 簡單入門第一季(二)詳解Asp.Net MVC3項目
前言
在上一篇文章Asp.Net MVC3 簡單入門第一季(一)環境準備中我簡單介紹了Asp.Net MVC3項目的安裝和第一個Asp.Net MVC3項目的基本情況。沒有詳細介紹項目中各個文件夾的作用,以及創建的第一個頁面是怎樣運行起來的?還有好多的疑問,那在這篇文章中我們將詳細介紹項目中各個文件夾的作用,并真的第一個項目我們簡要介紹一下Asp.Net MVC的URL驅動的是怎么回事。
第一節:Asp.Net MVC3項目介紹
讓我們先看一下,一個普通的Asp.Net MVC3項目的樣例,如下圖所示

跟WebFrom還是有區別的,如果你已經了解Asp.Net MVC2的話,那就感覺異常熟悉了!但還是有些區別的。不管怎樣我們都一一介紹一下。
很有意思的事情是即使我們創建一個空的MVC項目,VS也自動幫我們創建以上圖所示的目錄,這是為何呢?這是由于MVC秉承了“約定大于配置”的思想,我們在使用Asp.Net MVC3開發項目時也要注意,一定要按照它的約定辦事,比如:Controller在返回Action后需要一個View進行展示(當然是調用了View()方法時),這時候Asp.Net MVC回到Views文件夾下找到Controller名字相同的文件夾下面找到具體的頁面進行渲染,當然如果找不到會去Shared文件夾下去找。看下表所示的就是Asp.Net MVC3中各個文件夾的作用。
|
文件夾 |
作用 |
|
/Controllers |
存放控制器類【職責是:處理用戶的請求,指揮具體的頁面進行渲染交給客戶端】 |
|
/Views |
存放各個控制器對應的視圖文件,如果是Razor引擎的話那后綴是cshtml.如果使用的WebFrom的視圖引擎的話,那還是Aspx后綴。 |
|
/Content |
主要存放照片、CSS、Flash等文件 |
|
/Scripts |
主要存放腳本文件【微軟默認給我們提供了JQuery1.5.1的包,看來JQuery已經成為默認的工業標準了!我們沒有退路了,呵呵,當然我個人也非常喜歡JQuery】 |
|
/Models |
主要存放ViewModel類【當然這個不是嚴格這樣要求的,而是推薦你這么做。】 |
其他的幾個比較有意思的文件:
一個是Web.Config,另外一個是Global.asax雖然我們大家都非常熟悉,但是跟之前我們WebFrom還是有很多的區別的。WebConfig文件中,配置了啟用客戶端腳本驗證、配置了System.Web.Routing、System.Web.Mvc等組件。而Global.asax則在應用啟動的時候注冊了全局的Area【區域,后面會相信講解】、全局Filter、路由等。
第二節:Asp.Net MVC的請求處理模型
在上一篇中我們也簡單做了個小例子,直接添加一個Controller,然后在Action上添加一個View,直接運行,然后就在我們面前呈現了一個普通的Html頁面。那我們詳細解釋一下這種開發方式或者說開發模型。在講解之前我們先認識幾個概念:
Controller:控制器。在Contrller文件夾添加的以Controller結尾的類就是控制器,它的每個方法就是一個Action。它的職責是從Model中獲取數據,并將數據交給View,它是個指揮家的角色,它并不控制View的顯示邏輯,只是將Model的數據交給View,而具體的怎樣展示數據那是View的職責,所以Controller跟View是一個弱耦合的狀態,而且Controller可以任意指定具體的View進行渲染。所以達到了UI層的代碼和實體良好的分離。
View:視圖.負責數據的展示,當然這個視圖代碼的編寫應該是更接近純凈的Html的,而View層代碼的書寫又直接跟視圖引擎解析的規則有關,所以Razor的語法跟webFrom視圖引擎的語法截然不同。而筆者更傾向更喜歡Razor語法的簡潔、方便。
Model:很多人把Model理解成領域模型,而MVC本身是一個表現模式,它是更傾向于UI層的一個框架,所以一般我們指定的Model呢在使用時一般作為ViewModel來用,但是總的MVC的思想呢,Model還是領域相關的東西吧。
經過MVC3個模塊的了解分析,我們大體也知道了Asp.Net MVC的一些基本的概念。接下來我們分析一個完整的Http的處理過程。看下面一個圖:

客戶端發送一個Http請求,首先被我們的IIS捕獲到,然后根據Url請求的格式,最終交給我們的Route組件,然后它負責解析出我們的Url具體請求的是哪個Controller下的哪個Action。然后MVC經過處理調用我們的Action執行。在Action中我們一般會從業務的Fa?ade層取出數據,然后將傳輸層的數據轉換成ViewModel再交給View的視圖引擎渲染,最終生成Html的字節流寫回客戶端。
回到我們第一個項目中的情況是,請求:Http://localhost/Home/Index請求過來,由Route組件解析出Controller是Home,Action是Index,則通過工廠創建一個Controller的實例,然后調用InvokeAction方法,執行Index的方法,最終執行View()方法返回一個ViewResult實例,再調用自己的EexcuteResult方法,將數據上下文和輸出流交給視圖引擎,然后最終渲染成Html頁面交給客戶端,最終就看到了我們的第一個頁面。
總結一下:
Asp.Net MVC所有的請求都歸結到Action上,而且Asp.Net MVC請求--處理--響應的模型非常清晰,而且沒有WebFrom那種復雜的生命周期,整個請求處理非常明晰簡單,又回歸到了最原始的Web開發方式,就是簡單的請求處理響應!
記于:2011年6月12日23:45:26
初識Asp.Net MVC2.0
初識Asp.Net MVC2.0【續】
Asp.Net MVC3 簡單入門第一季(二)詳解Asp.Net MVC3項目

浙公網安備 33010602011771號