MVC(Model-View-Controller,模型—視圖—控制器模式)用於表示一種軟件架構模式。它把軟件系統分爲三個基本部分:模型(Model),視圖(View)和控制器(Controller)。html
那麼MVC模式和咱們熟悉的WebForm模式有什麼不一樣呢?他的各個部分又是怎樣分工的呢?web
咱們先來看一下普通的WebForm模式下,咱們請求一個例如http://www.51mvc.com/blog/index.aspx的URL,那麼咱們的WebForm程序會到網站根目錄下去尋找blog目錄下的index.aspx文件,而後由index.aspx頁面的CodeBehind文件(.CS文件)進行邏輯處理,其中或許也包括到數據庫去取出數據(其中的通過怎樣的BLL到DAL這裏就不談了),而後再由index.aspx頁面來呈現給用戶。簡單的示意圖以下所示:數據庫
也就是一個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的項目:mvc
注:若是你的是中文版的VS,安裝完後可能會出現找不到這個模板的現象,你能夠參考在中文版VS 08中安裝MVC這篇文章設置一下。網站
創建一個ASP.NET MVC項目後,默認的項目大概以下圖:3d
咱們能夠看到項目中有幾個文件夾的命名和MVC(Model-View-Controller,模型—視圖—控制器模式)是對應的。而後咱們運行一下項目看看:orm
咱們注意到地址欄的URL是 Home/Index,若是按照咱們前面說的WebForm的模式的話,咱們應該能夠在咱們的項目的根目錄下找到Home目錄,而後Home目錄下有個Index的文件,可是咱們並不能在根目錄下找到Home這個目錄。不過仍是讓咱們在Views目錄下找到了Views/Home/Index.aspx文件,咱們輸入這個地址運行看看:htm
Oh,No!路徑是對的,文件也存在,但爲何會是404,說找不到文件呢?若是不是直接訪問存在的物理文件,那麼MVC又是怎樣工做的呢?
原來啊,MVC模式的工做過程是這樣的:
在MVC中,客戶端的所請求的URL是被映射到相應的Controller去,而後由Controller來處理業務邏輯,或許要從Model中取數據,而後再由Controller選擇合適的View返回給客戶端。再說回前面咱們運行的ASP.NET MVC程序訪問的http://localhost:2176/Home/Index這個URL,它訪問的實際上是HomeController中的Index這個Action,見下圖:
其中public ActionResult Index()這個方法稱爲Controller的Action,他返回的是ActionResult的類型。一個Controller能夠有不少個Action。
那麼一個URL是怎樣被定位到Controller中來的呢?咱們先來看一下web.config文件,在web.config文件的httpModules配置節中,咱們能夠看到一個UrlRoutingModule: