MVC(Model-View-Controller,模型—視圖—控制器模式)用於表示一種軟件架構模式。它把軟件系統分爲三個基本部分:模型(Model),視圖(View)和控制器(Controller)。html
那麼MVC模式和咱們熟悉的WebForm模式有什麼不一樣呢?他的各個部分又是怎樣分工的呢?web
例如請求一個URL(http://www.xmcps.cn/Main/index.aspx),那麼咱們的WebForm程序會到網站根目錄下去尋找Main目錄下的index.aspx文件,而後由index.aspx頁面的CodeBehind文件(.CS文件)進行邏輯處理,其中包括到數據庫去取出數據(其中的通過怎樣的BLL到DAL這裏就不談了),而後再由index.aspx頁面來呈現給用戶。數據庫
在MVC中,客戶端的所請求的URL是被映射到相應的Controller去,而後由Controller來處理業務邏輯,或許要從Model中取數據,而後再由Controller選擇合適的View返回給客戶端。假如咱們運行的ASP.NET MVC程序訪問的http://www.xmcps.cn/Home/Index這個URL,它訪問的實際上是HomeController中的Index這個Action,見下圖:架構
其中public ActionResult Index()這個方法稱爲Controller的Action,他返回的是ActionResult的類型。一個Controller能夠有不少個Action。mvc
那麼一個URL是怎樣被定位到Controller中來的呢?咱們先來看一下web.config文件,在web.config文件的httpModules配置節中,咱們能夠看到一個UrlRoutingModule:網站
就是這個UrlRoutingModule來把URL定位到Controller中去的。而對於URL會被路由到哪個Controller中去,這些咱們是徹底能夠本身定義的。咱們到Global.asax文件去看一下:spa
咱們能夠看到這裏定義了一個名爲"Default"的Route,還定義了默認的參數。code
默認參數的意義在於,當咱們訪問例如http://localhost:2176/的URL的時候,他會將不存在的參數用默認的參數補上,也就是至關於訪問http://localhost:2176/Home/Index同樣。orm
注意:咱們知道在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文件。htm
咱們知道了一個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文件,內容以下:
也就是訪問Views目錄下的全部的文件都會由System.Web.HttpNotFoundHandler來處理,因此請不要將資源文件(CSS、JS、圖片等)放到Views目錄中。若是你確實要放到Views目錄下的話,請修改Views/web.config文件。
此文章連接供你們參考:http://www.cnblogs.com/QLeelulu/archive/2008/09/30/1302462.html