ASP.NET MVC 入門1、簡介

什麼是MVC模式
MVC(Model-View-Controller,模型—視圖—控制器模式)用於表示一種軟件架構模式。它把軟件系統分爲三個基本部分:模型(Model),視圖(View)和控制器(Controller)。
那麼MVC模式和我們熟悉的WebForm模式有什麼不同呢?他的各個部分又是怎樣分工的呢?
我們先來看一下普通的WebForm模式下,我們請求一個例如http://www.51mvc.com/blog/index.aspx的URL,那麼我們的WebForm程序會到網站根目錄下去尋找blog目錄下的index.aspx文件,然後由index.aspx頁面的CodeBehind文件(.CS文件)進行邏輯處理,其中或許也包括到數據庫去取出數據(其中的經過怎樣的BLL到DAL這裏就不談了),然後再由index.aspx頁面來呈現給用戶。簡單的示意圖如下所示:
p_w_picpath
也就是一個URL請求的是在服務器與該URL對應路徑上的物理文件(ASPX文件或其他),然後由該文件來處理這個請求並返回結果給客戶端。
但是,對於MVC模式,這是怎樣的一個過程呢?
我們先來建一個ASP.NET MVC的項目吧。VS2008默認是沒有ASP.NET MVC的項目模板的,首先我們需要到http://www.microsoft.com/downloads/details.aspx?FamilyId=A24D1E00-CD35-4F66-BAA0-2362BDDE0766&displaylang=en去下載最新的ASP.NET MVC的安裝程序,目前最新版本的Microsoft ASP.NET MVC Beta(10/15/2008)。下載安裝完後,我們可以在新建項目那裏找到ASP.NET MVC的項目:
p_w_picpath 
注:如果你的是中文版的VS,安裝完後可能會出現找不到這個模板的現象,你可以參考在中文版VS 08中安裝MVC這篇文章設置一下。
建立一個ASP.NET MVC項目後,默認的項目大概如下圖:
p_w_picpath
我們可以看到項目中有幾個文件夾的命名和MVC(Model-View-Controller,模型—視圖—控制器模式)是對應的。然後我們運行一下項目看看:
p_w_picpath
我們注意到地址欄的URL是 Home/Index,如果按照我們前面說的WebForm的模式的話,我們應該可以在我們的項目的根目錄下找到Home目錄,然後Home目錄下有個Index的文件,但是我們並不能在根目錄下找到Home這個目錄。不過還是讓我們在Views目錄下找到了Views/Home/Index.aspx文件,我們輸入這個地址運行看看:
p_w_picpath
Oh,No!路徑是對的,文件也存在,但爲什麼會是404,說找不到文件呢?如果不是直接訪問存在的物理文件,那麼MVC又是怎樣工作的呢?
原來啊,MVC模式的工作過程是這樣的:
p_w_picpath
在MVC中,客戶端的所請求的URL是被映射到相應的Controller去,然後由Controller來處理業務邏輯,或許要從Model中取數據,然後再由Controller選擇合適的View返回給客戶端。再說回前面我們運行的ASP.NET MVC程序訪問的http://localhost:2176/Home/Index這個URL,它訪問的其實是HomeController中的Index這個Action,見下圖:
p_w_picpath
其中public ActionResult Index()這個方法稱爲Controller的Action,他返回的是ActionResult的類型。一個Controller可以有很多個Action。
那麼一個URL是怎樣被定位到Controller中來的呢?我們先來看一下web.config文件,在web.config文件的httpModules配置節中,我們可以看到一個UrlRoutingModule:
<add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

就是這個UrlRoutingModule來把URL定位到Controller中去的。而對於URL會被路由到哪一個Controller中去,這些我們是完全可以自己定義的。我們到Global.asax文件去看一下:
p_w_picpath
我們可以看到這裏定義了一個名爲"Default"的Route,還定義了默認的參數。默認參數的意義在於,當我們訪問例如http://localhost:2176/的URL的時候,他會將不存在的參數用默認的參數補上,也就是相當於訪問http://localhost:2176/Home/Index一樣。
注意:我們知道在IIS中,我們訪問網站的根目錄的時候,如果我們不指定要訪問的路徑,IIS會自己根據在IIS中設置的默認文檔去訪問。例如我們訪問http://localhost:2176/這個URL的時候,IIS會去尋找網站根目錄下的Default.aspx文件(假設我們設置了IIS的默認文檔爲Default.aspx)。而在ASP.NET MVC中對於類似http://localhost:2176/這樣的網站根目錄的路徑,並不會經過Route的處理,所以我們看到我們建立的ASP.NET MVC程序的根目錄下有個Default.aspx文件,該文件就是用於處理前面的訪問根目錄的情況的。請不要刪除該文件。它會將http://localhost:2176/Default.aspx交由ASP.NET MVC來處理,具體請看Default.aspx.cs文件。
我們知道了一個URL是怎樣定位到相應的Controller中去的了,那麼View又是怎麼被返回給客戶端的呢?我們從前面的截圖中看到,Controller中的Action方法中有個return View()的方法。默認情況下它會返回與Action同名的view.在ASP.NET MVC默認的視圖引擎(WebFormViewEngine)下,view是按如下路徑訪問的:
/Views/{Controller}/{Action}.aspx
也就是說對於http://localhost:2176/Home/Index這個路徑,在默認情況下,在Index這個Action中用return View()來返回view的時候,會去尋找/Views/Home/Index.aspx文件,如果找不到這個文件,就會去Share目錄中尋找:/Views/Share/Index.aspx,如果都找不到,就會拋出找不到View的異常。return View("lulu.aspx")來指定要返回哪一個view:/Views/Home/lulu.aspx。
那麼爲什麼前面我們直接訪問Views/Home/Index.aspx這裏文件的時候會出現404錯誤,說找不到文件呢?因爲在MVC中,是不建議直接去訪問View的,所以我們建立的ASP.NET MVC程序在默認情況下就在Views目錄下加了一個web.config文件,內容如下:
p_w_picpath
也就是訪問Views目錄下的所有的文件都會由System.Web.HttpNotFoundHandler來處理,所以請不要將資源文件(CSS、JS、圖片等)放到Views目錄中。如果你確實要放到Views目錄下的話,請修改Views/web.config文件。
至此,大家應該對MVC的工作原理有一個大概的瞭解了。我們就先說到這裏吧。Enjoy!
---------------------------------------------------------------------
更多內容,請關注http://blog.51mvc.com/ 和 http://bbs.51mvc.com/ 
作者:QLeelulu Follow 
出處:http://QLeelulu.cnblogs.com/ 
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章