學習 ASP.NET MVC (第一回)理論篇
系列文章導航:
MVC
三種角色:
--Model:用于存儲數據的組件
--View:根據Model數據進行內容展示的組件
--Controller:接受并處理用戶指令(操作Model),選擇一個View并輸出內容。
Controller對View進行引用,但是View不知道Controller的存在。Controller和View都是單向引用Model
MVC變種:Observer模式,MVP模式。
MVC與三層架構:
三層架構是一種架構模式,它有很明顯的層次關系,而MVC是一種表現模式,其中的三個元素沒有層次上的先后關系,只是組件之間的協作。
MVC與WebForms
WebForms提倡的是將Web開發抽象成一個組件模型,使用方便,入門容易,但是封裝性太強,用好很難,內部有復雜的生命周期和事件處理。
ASP.NET MVC的優勢
1.直接,沒有太多控件的概念
2.易于對界面邏輯進行單元測試
3.易于前后臺人員的配合
....
ASP.NET MVC的組件協作(基本流程)
URL-->Controller(會執行一個方法Action)-->從數據庫中獲取一個Model對象-->將Model作為ViewData傳遞給View(Detail.aspx)。
主要的幾個步驟:URL Routing,Controller&Action Executing,View Rendering
URL Routing:
ASP.NET MVC使用的是URL進行驅動的,根據程序中指定的規則從URL中確定Controller名,Action名,其他參數。
System.Web.Routing.dll。獨立于ASP.NET MVC框架的組件,可用于任何ASP.NET應用程序。作用是將URL轉換為RouteData等數據。
使用:
1>.配置UrlRoutingModule。
2>.在Application_Start時添加規定,這里需要注意鎖定的問題(由于Web應用程序天生是多線程的)。
3>.規則的順序。
4>.RouteExistingFiles屬性。
在Global.asax文件中定義:

如果URL訪問的是磁盤上的一個物理文件,默認情況下不會被URL Routing,可以用RouteTable.Routes.RouteExistingFiles=true;避免。
Routing和URL Rewrite的區別:
URL Rewrite:改變程序處理的URL(ASP.NET WebFrom)
URL Route:根據URL的規則選擇執行(MVC)
Controller & Action
通過URL Routing確定的Controller類和Action方法。Action中執行的是表現邏輯,根據用戶傳入的參數(URL)來操作Model(執行業務邏輯)-->獲取數據-->選擇一個View進行輸出。
Action執行之后返回的是一個ActionResult(生成html,頁面跳轉...)
Controller是一個類,而Action是一個方法。
Conetroller的要求:
1>.繼承System.Web.Mvc.Controller類
2>.以Controller結尾
3>.XyzController的名稱即為:Xyz-->約定勝于配置
4>.ASP.NET MVC框架會在Web應用程序所引用的所有程序及范圍內查找Controller。
Action的要求:
必須是個公有的方法
返回ActionResult類型,也可以返回void。直接使用Response.Write
必須是實例方法
不能使泛型方法
沒有標注NonActionAttribute
不能被重載
ActionResult:是一個抽象類表示Action的執行結果,ASP.NET MVC架構將在獲得ActionReault之后執行其Execute方法。
內置的ActionResult:ActionRedirectResult:跳轉到某個Action。HttpRedirectResult:跳轉到任意地址。RenderViewResult:生成內容。EmptyResult:什么都不做。JsonResult:用于JSON序列化輸出。ContentResult:直接輸出字符串。
生成View
ViewEngine(表明使用了什么樣的View進行生成),它是可替換的。
默認使用aspx,ascx,master
MvcContrib提供了額外的4種ViewEngine。
ASP.NET MVC的默認View:.aspx--頁面內容的主體,.master--模板框架,.ascx--局部視圖:Html.RenderUserControl方法將一個UserControl生成局部視圖。
需繼承System.Web.Mvc.ViewPage
--ViewData有個屬性為Model
--ViewPage的ViewData為T類型
--默認的ViewPage近似于ViewPage
View中生成html的方式:
1>.內聯腳本方式:for{},foreach{}。類似ASP,但是并不是業務邏輯和顯示的html放在一起。兩者還是分離的。
使用腳本最大的好處就是使用靈活。調試起來是不是不是很方便???
2>.使用控件:Repeater(推薦)可以用來顯示一維數據,ListView (推薦)可以用來顯示二維數據
3>.使用輔助方法
--HtmlHelper類:提供的一些輔助的方法為我們生成Form,ActionLink,Button,CheckBox,Select(下拉框),Encode....的HTML
方法中提供了很多重載。
--UrlHelper類:生成Url以及與Url相關的東西。比如生成Action的Url。