官术网_书友最值得收藏!

1.9 ASP.NET MVC技術專題

MVC是一種軟件架構模式,模式分為3個部分:模型(Model)、視圖(View)和控制器(Controller),MVC模式最早是由Trygve Reenskaug在1974年提出的,其特點是松耦合度、關注點分離、易擴展和維護,使前端開發人員和后端開發人員充分分離,不會相互影響工作內容與工作進度。而ASP.NET MVC是微軟在2007年開始設計并于2009年3月發布的Web開發框架,從1.0版開始到現在的5.0版本,經歷了5個主要版本改進與優化,采用ASPX和Razor這兩種內置視圖引擎,也可以使用其他第三方或自定義視圖引擎,通過強類型的數據交互使開發變得更加清晰高效,強大的路由功能配置友好的URL重寫。ASP.NET MVC是開源的,通過Nuget(包管理工具)可以下載到很多開源的插件類庫。ASP.NET MVC是基于ASP.NET另一種開發框架。

1.9.1 ASP.NET MVC中的模型、視圖和控制器

模型、視圖和控制器是MVC框架的三個核心組件,其三者關系如圖1.25所示。

(1)模型(Model):模型對象是實現應用程序數據域邏輯的部件。通常,模型對象會檢索模型狀態并執行儲存或讀取數據。例如,將Product對象模型的信息更改后提交到數據庫對應的Product表中進行更新。

(2)視圖(View):視圖是顯示用戶界面(UI)的部件。在常規情況下,視圖上的內容是由模型中的數據創建的。例如,對于Product對象模型可以將其綁定到視圖上。除了展示數據外,還可以實現對數據的編輯操作。

(3)控制器(Controller):控制器是處理用戶交互、使用模型并最終選擇要呈現給用戶的視圖等流程控制部件。控制器接收用戶的請求,然后處理用戶要查詢的信息,最后控制器將一個視圖交還給用戶。

圖1.25 模型、視圖和控制器的三者關系

1.9.2 什么是Routing

在ASP.NET WebForms中,一次URL請求對應著一個ASPX頁面,ASPX頁面又必須是一個物理文件。而在ASP.NET MVC中,一個URL請求是由控制中的Action方法來處理的。這是由于使用了URLRouting(路由機制)來正確定位到Controller(控制器)和Action(方法)中,Routing的主要作用就是解析URL和生成URL。

在創建ASP.NET MVC項目時,默認會在App_Start文件夾下的RouteConfig.cs文件中創建基本的路由規則配置方法,該方法會在ASP.NET全局應用程序類中被調用。

上面這段默認的路由配置規則匹配了以下任意一個Url請求:

 http://localhost

 http://localhost/Home/Index

 http://localhost/Index/Home

 http://localhost/Home/Index/3

 http://localhost/Home/Index/red

URLRouting的執行流程如圖1.26所示。

圖1.26 URLRouting流程圖

1.9.3 MVC的請求過程

當在瀏覽器中輸入一個有效的請求地址,或者通過網頁上的某個按鈕請求一個地址時,ASP.NET MVC通過配置的路由信息找到最符合請求的地址,如果路由找到了合適的請求,訪問先到達控制器和Action方法,控制器接收用戶請求傳遞過來的數據(包括URL參數、Post參數、Cookie等),并做出相應的判斷處理,如果本次是一次合法的請求并需要加載持久化數據,那么通過Model實體模型構造相應的數據。在響應用戶階段可返回多種數據格式,分別如下:

(1)返回默認View(視圖),即與Action方法名相同。

(2)返回指定的View,但Action必須屬于該控制器下。

(3)重定向到其他的View(視圖)。

例如,當一個用戶在瀏覽器中輸入并請求了“http://localhost/Home/Index”地址,程序會先執行路由匹配,然后轉到Home控制器,再進入Index方法中。下面是Home控制的代碼片段:

定義在控制器中的Action方法默認返回的是一個ActionResult對象,ActionResult對象對Action執行結果進行了封裝,用于最終對請求進行響應。ASP.NET MVC提供了一系列的ActionResult實現類來實現多種不同的響應結果。下面列舉幾個常用的ActionResult返回類型:

(1)View方法:返回ActionResult視圖結果并將視圖呈現給用戶。參數可以返回Model對象。

(2)RedirectToAction方法:返回RedirectToRouteResult重定向動作結果,同類型的還有Redirect方法返回的RedirectResult結果。

(3)PartialView方法:返回PartialViewResult分部視圖結果,視圖文件應定義在View/Shared目錄下。

(4)Content方法:返回ContentResult類型的用戶定義的文本內容,此類型多用于Ajax請求需要返回的文本內容。

(5)Json方法:返回序列化JsonResult類型的JSON格式數據。同樣,此方法多用于Ajax請求。需要注意的是如果Action是Get請求,則JSON方法的參數中必須傳入JsonRequestBehavior.AllowGet,否則會因為避免暴露敏感信息而報出異常錯誤。

(6)JavaScript方法:返回可在客戶端執行腳本的JavaScriptResult對象,但使用JavaScript方法時,需要兩個必要的前提,即Ajax和jquery.unobtrusive-ajax.js。

(7)File方法:返回用于寫入到響應中的二進制輸出FileContentResult,一般可用于簡單的下載功能。

(8)null:返回不執行任何操作結果的EmptyResult對象。

主站蜘蛛池模板: 唐海县| 乌鲁木齐市| 蛟河市| 宜君县| 洞口县| 陆河县| 彭山县| 安乡县| 商水县| 九台市| 日喀则市| 梅州市| 乌拉特后旗| 启东市| 天津市| 绍兴市| 墨江| 夏津县| 察哈| 涟水县| 进贤县| 木里| 鄄城县| 田阳县| 卓资县| 临沂市| 恩平市| 玛多县| 正镶白旗| 鄄城县| 南乐县| 翁源县| 沙坪坝区| 东城区| 德兴市| 巴里| 禄劝| 黄石市| 潢川县| 婺源县| 肇州县|