MVC(Model-View-Controller,模型—視圖—控制器模式)用于表示一種軟件架構(gòu)模式。它把軟件系統(tǒng)分為三個(gè)基本部分:模型(Model),視圖(View)和控制器(Controller)。
那么MVC模式和我們熟悉的WebForm模式有什么不同呢?他的各個(gè)部分又是怎樣分工的呢?
一、WebForm請(qǐng)求方式

例如請(qǐng)求一個(gè)URL(http://www./Main/index.aspx),那么我們的WebForm程序會(huì)到網(wǎng)站根目錄下去尋找Main目錄下的index.aspx文件,然后由index.aspx頁(yè)面的CodeBehind文件(.CS文件)進(jìn)行邏輯處理,其中包括到數(shù)據(jù)庫(kù)去取出數(shù)據(jù)(其中的經(jīng)過(guò)怎樣的BLL到DAL這里就不談了),然后再由index.aspx頁(yè)面來(lái)呈現(xiàn)給用戶(hù)。
二、MVC請(qǐng)求方式

在MVC中,客戶(hù)端的所請(qǐng)求的URL是被映射到相應(yīng)的Controller去,然后由Controller來(lái)處理業(yè)務(wù)邏輯,或許要從Model中取數(shù)據(jù),然后再由Controller選擇合適的View返回給客戶(hù)端。假如我們運(yùn)行的ASP.NET MVC程序訪問(wèn)的http://www./Home/Index這個(gè)URL,它訪問(wèn)的其實(shí)是HomeController中的Index這個(gè)Action,見(jiàn)下圖:

其中public ActionResult Index()這個(gè)方法稱(chēng)為Controller的Action,他返回的是ActionResult的類(lèi)型。一個(gè)Controller可以有很多個(gè)Action。
那么一個(gè)URL是怎樣被定位到Controller中來(lái)的呢?我們先來(lái)看一下web.config文件,在web.config文件的httpModules配置節(jié)中,我們可以看到一個(gè)UrlRoutingModule:
<add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
就是這個(gè)UrlRoutingModule來(lái)把URL定位到Controller中去的。而對(duì)于URL會(huì)被路由到哪一個(gè)Controller中去,這些我們是完全可以自己定義的。我們到Global.asax文件去看一下:

我們可以看到這里定義了一個(gè)名為"Default"的Route,還定義了默認(rèn)的參數(shù)。
默認(rèn)參數(shù)的意義在于,當(dāng)我們?cè)L問(wèn)例如http://localhost:2176/的URL的時(shí)候,他會(huì)將不存在的參數(shù)用默認(rèn)的參數(shù)補(bǔ)上,也就是相當(dāng)于訪問(wèn)http://localhost:2176/Home/Index一樣。
注意:我們知道在IIS中,我們?cè)L問(wèn)網(wǎng)站的根目錄的時(shí)候,如果我們不指定要訪問(wèn)的路徑,IIS會(huì)自己根據(jù)在IIS中設(shè)置的默認(rèn)文檔去訪問(wèn)。例如我們?cè)L問(wèn)http://localhost:2176/這個(gè)URL的時(shí)候,IIS會(huì)去尋找網(wǎng)站根目錄下的Default.aspx文件(假設(shè)我們?cè)O(shè)置了IIS的默認(rèn)文檔為Default.aspx)。而在ASP.NET MVC中對(duì)于類(lèi)似http://localhost:2176/這樣的網(wǎng)站根目錄的路徑,并不會(huì)經(jīng)過(guò)Route的處理,所以我們看到我們建立的ASP.NET MVC程序的根目錄下有個(gè)Default.aspx文件,該文件就是用于處理前面的訪問(wèn)根目錄的情況的。請(qǐng)不要?jiǎng)h除該文件。它會(huì)將http://localhost:2176/Default.aspx交由ASP.NET MVC來(lái)處理,具體請(qǐng)看Default.aspx.cs文件。
我們知道了一個(gè)URL是怎樣定位到相應(yīng)的Controller中去的了,那么View又是怎么被返回給客戶(hù)端的呢?我們從前面的截圖中看到,Controller中的Action方法中有個(gè)return View()的方法。默認(rèn)情況下它會(huì)返回與Action同名的view.在ASP.NET MVC默認(rèn)的視圖引擎(WebFormViewEngine)下,view是按如下路徑訪問(wèn)的:
/Views/{Controller}/{Action}.aspx
也就是說(shuō)對(duì)于http://localhost:2176/Home/Index這個(gè)路徑,在默認(rèn)情況下,在Index這個(gè)Action中用return View()來(lái)返回view的時(shí)候,會(huì)去尋找/Views/Home/Index.aspx文件,如果找不到這個(gè)文件,就會(huì)去Share目錄中尋找:/Views/Share/Index.aspx,如果都找不到,就會(huì)拋出找不到View的異常。return View("lulu.aspx")來(lái)指定要返回哪一個(gè)view:/Views/Home/lulu.aspx。
那么為什么前面我們直接訪問(wèn)Views/Home/Index.aspx這里文件的時(shí)候會(huì)出現(xiàn)404錯(cuò)誤,說(shuō)找不到文件呢?因?yàn)樵贛VC中,是不建議直接去訪問(wèn)View的,所以我們建立的ASP.NET MVC程序在默認(rèn)情況下就在Views目錄下加了一個(gè)web.config文件,內(nèi)容如下:

也就是訪問(wèn)Views目錄下的所有的文件都會(huì)由System.Web.HttpNotFoundHandler來(lái)處理,所以請(qǐng)不要將資源文件(CSS、JS、圖片等)放到Views目錄中。如果你確實(shí)要放到Views目錄下的話,請(qǐng)修改Views/web.config文件。
此文章鏈接供大家參考:http://www.cnblogs.com/QLeelulu/archive/2008/09/30/1302462.html