服務(wù)熱線
153 8323 9821
隨著ASP.NET MVC 1.0版本的正式發(fā)布, 我將本系列文章也更新到了1.0, 對于已經(jīng)發(fā)表的文章我都會(huì)根據(jù)1.0版本重新編輯. 希望本系列文章能打給大家?guī)椭?
ASP.NET MVC是微軟官方提供的開源MVC框架. 在經(jīng)過了漫長的preview和2個(gè)RC版本后, 終于發(fā)布了1.0版本.其實(shí)從RC開始ASP.NET MVC的核心代碼就已經(jīng)趨于穩(wěn)定.所以現(xiàn)在開始學(xué)習(xí)ASP.NET MVC是一個(gè)很好的時(shí)間點(diǎn).學(xué)習(xí)的早,而且不用擔(dān)心知識過時(shí).
本系列教程是我在學(xué)習(xí)ASP.NET MVC時(shí)的總結(jié), 比如雖然我學(xué)習(xí)老趙的視頻教程, 但是因?yàn)榘姹据^老, 一般我都要從最新版本上進(jìn)行知識的校驗(yàn)與升華, 然后將最后的精華總結(jié)出來寫成文字. 現(xiàn)在還在不斷的學(xué)習(xí), 不斷地寫作.希望大家喜歡本系列文章, 我將用精益求精的精神寫本系列文章.
現(xiàn)在開始跟著我一步一步學(xué)習(xí)ASP.NET MVC.在什么都不知道之前, 還是讓我們先下載一個(gè)ASP.NET MVC程序. 當(dāng)看到程序運(yùn)行后, 我的心才會(huì)踏實(shí)很多.
首先去ASP.NET MVC的官網(wǎng)看看:
這里我們可以下載ASP.NET MVC的安裝文件.目前最新版本是1.0,另外我們可以在CodePlex上獲取源代碼:
http://www.codeplex.com/aspnet
在官網(wǎng)上下載ASP.NET MVC安裝文件, 一路回車完成安裝. 啟動(dòng)VS2008 SP1(不是VS2008?不是SP1?作為一個(gè)專業(yè)的IT人士,水平可以菜,軟件咱一定要用新的!去找個(gè)新版本吧!),點(diǎn)擊新建,在Web中可以找到:
點(diǎn)擊確定即創(chuàng)建了一個(gè)默認(rèn)的MVC項(xiàng)目.同時(shí)還會(huì)創(chuàng)建一個(gè)測試項(xiàng)目. 這些我現(xiàn)在都不懂也不關(guān)注, 直接將Web項(xiàng)目中的default.aspx設(shè)置為啟動(dòng)頁, 運(yùn)行項(xiàng)目, 一個(gè)ASP.NET MVC的項(xiàng)目已經(jīng)運(yùn)行在我的電腦上了:
而且那個(gè)Home和About還能點(diǎn)擊!雖然現(xiàn)在我什么都不懂, 不過看著能運(yùn)行的實(shí)例, 心里就踏實(shí)多了!
一個(gè)ASP.NET頁面通常需要做這些事情:
MVC即Model, View, Controller
Model就是我們1中獲取的網(wǎng)頁需要的數(shù)據(jù)
Controller就是我們獲取數(shù)據(jù),然后將數(shù)據(jù)綁定到頁面控件的這個(gè)業(yè)務(wù)流程.不十分正確但是可以先這樣理解: Controller就是我們的Page_Load方法邏輯.
View就是我們的aspx頁面,注意這是一個(gè)不包含后臺(tái)代碼文件的aspx頁面.(其實(shí)帶有.asp.cs文件也不會(huì)有編譯錯(cuò)誤,但是這樣寫代碼就違背了MVC的設(shè)計(jì)初衷)
下面這張圖很好的概括了MVC的作用:
一個(gè)URL請求, ASP.NET MVC引擎會(huì)分析這個(gè)URL要使用那個(gè)Controller, 這個(gè)Controller(實(shí)際上真正的方法是Controller的Action)從數(shù)據(jù)庫或者其他數(shù)據(jù)源獲取數(shù)據(jù),通常這些數(shù)據(jù)是一個(gè)業(yè)務(wù)的模型類(即MVC中的Model). Controller將Model對象傳遞給頁面(即MVC中的View), 頁面顯示在瀏覽器上.(這一步是ViewEngine的功能, 我們一般的ASPX頁面使用的是WebForm的ViewEngine,當(dāng)然也可以替換.)
簡單的概念也有了.實(shí)例也能運(yùn)行了.現(xiàn)在就是看看這個(gè)實(shí)例是如何使用ASP.NET MVC的.從首頁下手.
首頁網(wǎng)站的地址應(yīng)該是 http://localhost:1847/home/index (1847是端口號,隨機(jī)生成,所以會(huì)不同), 為什么地址不是具體的頁面但是最后卻將請求提交給了view/home/Index.aspx 頁面? 很明顯是使用了URL重寫. ASP.NET中叫做UrlRouting,對應(yīng)的程序集是System.Web.Routing, 打開項(xiàng)目的Global.asax.cs文件, 會(huì)找到我們建立的頁面重寫規(guī)則:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
}
protected void Application_Start()
{
RegisterRoutes(RouteTable.Routes);
}
關(guān)于Routing的深入了解將在以后介紹, 這里我們完全可以照葫蘆畫瓢, 按照實(shí)例添加新的重寫規(guī)則.
最后, http://localhost:1847/home/index 就被解析為:
Controller為Home, Action為Index, 沒有id參數(shù).
在Controllers文件夾下我們可以找到HomeController.cs, 這里使用了一個(gè)約定, 就是如果URL中獲取到的Controller名字是Home, 則他的Controller類名就是HomeController. 在URL中的名字后加上”Controller”.
實(shí)例中Controller都放在Controllers文件夾, 所以我們可以按照命名約定很容易就可以找到HomeController類
打開HomeControllers.cs, 發(fā)現(xiàn)里面有兩個(gè)方法:
public ActionResult Index()
{
ViewData["Message"] = "Welcome to ASP.NET MVC!";
return View();
}
public ActionResult A