《从零开始学习ASP.NET MVC 1.0》-开天辟地入门篇
《從零開始學習ASP.NET MVC 1.0》 文章導航
- (一) 開天辟地入門篇
- (二) 識別URL的Routing組件
- (三) Controller/Action 深入解析與應用實例
- (四) View/Model 全解
- (五) ViewEngine 深入解析與應用實例
?
一.摘要
隨著ASP.NET MVC 1.0版本的正式發布, 我將本系列文章也更新到了1.0, 對于已經發表的文章我都會根據1.0版本重新編輯. 希望本系列文章能打給大家幫助.
?
二.前言
ASP.NET MVC是微軟官方提供的開源MVC框架. 在經過了漫長的preview和2個RC版本后, 終于發布了1.0版本.其實從RC開始ASP.NET MVC的核心代碼就已經趨于穩定.所以現在開始學習ASP.NET MVC是一個很好的時間點.學習的早,而且不用擔心知識過時.
本系列教程是我在學習ASP.NET MVC時的總結, 比如雖然我學習老趙的視頻教程, 但是因為版本較老, 一般我都要從最新版本上進行知識的校驗與升華, 然后將最后的精華總結出來寫成文字. 現在還在不斷的學習, 不斷地寫作.希望大家喜歡本系列文章, 我將用精益求精的精神寫本系列文章.
三.Hello ASP.NET MVC
現在開始跟著我一步一步學習ASP.NET MVC.在什么都不知道之前, 還是讓我們先下載一個ASP.NET MVC程序. 當看到程序運行后, 我的心才會踏實很多.
首先去ASP.NET MVC的官網看看:
http://www.asp.net/mvc/
這里我們可以下載ASP.NET MVC的安裝文件.目前最新版本是1.0,另外我們可以在CodePlex上獲取源代碼:
http://www.codeplex.com/aspnet
在官網上下載ASP.NET MVC安裝文件, 一路回車完成安裝. 啟動VS2008 SP1(不是VS2008?不是SP1?作為一個專業的IT人士,水平可以菜,軟件咱一定要用新的!去找個新版本吧!),點擊新建,在Web中可以找到:
點擊確定即創建了一個默認的MVC項目.同時還會創建一個測試項目. 這些我現在都不懂也不關注, 直接將Web項目中的default.aspx設置為啟動頁, 運行項目, 一個ASP.NET MVC的項目已經運行在我的電腦上了:
而且那個Home和About還能點擊!雖然現在我什么都不懂, 不過看著能運行的實例, 心里就踏實多了!
四.學習MVC的概念
一個ASP.NET頁面通常需要做這些事情:
MVC即Model, View, Controller
Model就是我們1中獲取的網頁需要的數據
Controller就是我們獲取數據,然后將數據綁定到頁面控件的這個業務流程.不十分正確但是可以先這樣理解: Controller就是我們的Page_Load方法邏輯.
View就是我們的aspx頁面,注意這是一個不包含后臺代碼文件的aspx頁面.(其實帶有.asp.cs文件也不會有編譯錯誤,但是這樣寫代碼就違背了MVC的設計初衷)
下面這張圖很好的概括了MVC的作用:
一個URL請求, ASP.NET MVC引擎會分析這個URL要使用那個Controller, 這個Controller(實際上真正的方法是Controller的Action)從數據庫或者其他數據源獲取數據,通常這些數據是一個業務的模型類(即MVC中的Model). Controller將Model對象傳遞給頁面(即MVC中的View),? 頁面顯示在瀏覽器上.(這一步是ViewEngine的功能, 我們一般的ASPX頁面使用的是WebForm的ViewEngine,當然也可以替換.)
五.學習實例首頁
簡單的概念也有了.實例也能運行了.現在就是看看這個實例是如何使用ASP.NET MVC的.從首頁下手.
1.尋找入口方法
首頁網站的地址應該是 http://localhost:1847/home/index (1847是端口號,隨機生成,所以會不同), 為什么地址不是具體的頁面但是最后卻將請求提交給了view/home/Index.aspx 頁面? 很明顯是使用了URL重寫. ASP.NET中叫做UrlRouting,對應的程序集是System.Web.Routing, 打開項目的Global.asax.cs文件, 會找到我們建立的頁面重寫規則:
public static void RegisterRoutes(RouteCollection routes){routes.IgnoreRoute("{resource}.axd/{*pathInfo}");routes.MapRoute("Default", // Route name"{controller}/{action}/{id}", // URL with parametersnew { controller = "Home", action = "Index", id = "" } // Parameter defaults);}protected void Application_Start(){RegisterRoutes(RouteTable.Routes);}
?
關于Routing的深入了解將在以后介紹, 這里我們完全可以照葫蘆畫瓢, 按照實例添加新的重寫規則.
最后, http://localhost:1847/home/index 就被解析為:
Controller為Home, Action為Index, 沒有id參數.
2.尋找Controller
在Controllers文件夾下我們可以找到HomeController.cs, 這里使用了一個約定, 就是如果URL中獲取到的Controller名字是Home, 則他的Controller類名就是HomeController. 在URL中的名字后加上”Controller”.
實例中Controller都放在Controllers文件夾, 所以我們可以按照命名約定很容易就可以找到HomeController類
3.尋扎Action
打開HomeControllers.cs, 發現里面有兩個方法:
public ActionResult Index(){ViewData["Message"] = "Welcome to ASP.NET MVC!";return View();}public ActionResult About(){return View();}
其中的Index和About都是Action.這個Action是個什么東東呢?目前我只知道一個Controller可以包含多個Action, MVC模式中Controller角色的具體實現邏輯都是在Action中的.
因為我們的Action是Index, 所以自然就要調用Index()方法.這里將"Webcome to ASP.NET MVC!", 這里的Model角色就是這句話, 也就是一個字符串對象.
Controller的一個重要作用就是將Model對象傳遞給View,也就是具體的頁面. 傳遞的方法就是將這個字符串放到ViewData這個集合對象中, 然后在頁面上也調用這個對象獲取數據. 這個ViewData 對象一定是靜態的, 或者至少是和HttpContext對象關聯的, 否則到了View頁面上是不能夠調用的.但是也不知道ASP.NET MVC是在什么時候創建了這個對象.有心深入的一會去源代碼里找找就能找到答案了.
4.尋找View
Model有了,數據有了, 接下來要跳轉到View去顯示數據了.第一個問題就是如何從Controller中跳到View上? return View() 這句話實現了此功能.其實如果這樣寫大家會更清楚:
public ActionResult Index(){ViewData["Message"] = "Welcome to ASP.NET MVC!";return View("index");}?
View方法中可以帶一個名字, 這個名字就是View的名字.如果把index改成about,那么訪問/home/index就會跳轉到about頁!
雖然知道了我們要返回到名稱是"index"的View上, 但是這個View的頁面在哪里呢?在Web中有一個Views文件夾:
這里面存放的都是View對象, 也就是只有顯示功能的aspx頁面文件.但是aspx文件要遵循約定: Views下面要按照Controller創建文件夾, 比如HomeController就對應Home文件夾, 然后在里面添加view, 比如index.aspx, 那么在HomeController中返回到名為Index的View對象實際就會返回Views/Home/Index.aspx頁面.
如果不寫View的名字, 則認為Action的名稱就是View的名稱.
5.頁面展示
最后的工作就是View頁面使用Model數據完整頁面顯示工作, 在index.aspx這個沒有后臺代碼的View對象中, 通過ViewData對象獲取Model:
<%= Html.Encode(ViewData["Message"]) %>?
接下來ViewEngine即頁面引擎會將aspx中的HTML部分以及上面的數據部分和在一起返回給瀏覽器.
關于View對象我注意到此頁面是繼承自System.Web.Mvc.ViewPage而不是直接繼承自System.Web.UI.Page, 而這個ViewData對象就是ViewPage中的一個屬性. 這里的ViewData一定是頁面級別的,當頁面編譯完畢這個對象就會被注銷(HTTP是無狀態的協議,每次請求其實都是生成一個新的ViewPage對象).
六.總結
雖然僅僅是第一篇入門文章, 但是是不是覺得已經會用ASP.NET MVC了? 雖然學習不可以驕傲, 但是可以自豪的是ASP.NET MVC我已經不再陌生, 即使不能駕輕就熟, 偶爾說出來幾個概念,給你解釋解釋啥是MVC, 還是很能嚇唬人的. 在后續文章中,我將對MVC的各種細節做具體的講解.希望大家喜歡本系列文章!
轉載于:https://www.cnblogs.com/dudu837/archive/2009/04/27/1444811.html
總結
以上是生活随笔為你收集整理的《从零开始学习ASP.NET MVC 1.0》-开天辟地入门篇的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 群联、希捷发布“全球最先进”PCIe 4
- 下一篇: 卢伟冰换新手机发微博:暗示K50宇宙终极