【ASP.NET MVC 学习笔记】- 10 Controller和Action(1)
本文參考:http://www.cnblogs.com/willick/p/3331521.html
1、繼承IController接口,示例代碼將當前請求的Controller和Action打印到瀏覽器:
public class BasicController : IController {public void Execute(RequestContext requestContext) {string controller = (string)requestContext.RouteData.Values["controller"];string action = (string)requestContext.RouteData.Values["action"];requestContext.HttpContext.Response.Write(string.Format("Controller: {0}, Action: {1}", controller, action));} }? ? ?稍微復雜一點的系統,繼承IController是需要做許多工作的,不建議直接繼承IController接口。
2、MVC 框架的 System.Web.Mvc.Controller 類,提供了足夠實用的特性來方便我們對請求的處理和返回結果。它提供了一下幾個關鍵的特性:
- Action方法:一個 Controller,它的行為被分為多個方法,通常一個方法對應著一個請求,并且可以通過方法參數來取得請求傳遞過來的數據。
- ActionResult:可以返回一個描述了 Action 方法執行結果的對象,這樣的好處是想返回什么結果就指定對應的返回對象就行,不用關心怎么去執行并生成結果。
- Filters:通過C#特性,對某一種行為的處理(比如授權和驗證)進行封裝,方便了在多個 Controller 和 Action 方法之間進行重用。
3、從Controller中獲取數據有以下三種主要來源:
- 一系列的上下文對象。
? ? ?最常見的上下文對象如下圖所示:
? ? ?
- 傳遞給 Action 方法的參數。
Controller 類通過 MVC 框架的 value provider 和 model binder 組件來為 Action 方法獲取參數的值。value provider 提供了一系列Controller中可以訪問到的值,在內部它通過從 Request.Form、Request.QueryString、Request.Files 和?RouteData.Values 等上下文對象中提取數據(鍵值集合),然后把數據傳遞給 model binder,model binder試圖將這些數據與Action方法的參數進行匹配。默認的 model binder 可以創建和賦值給任何.NET類型對象參數(即 Action 方法的參數),包括集合和自定義的類型。
- 顯式的調用框架的模型綁定(Model Binding)特性。
?4、ActionResult是描述 Action 方法執行結果的對象,它的好處是想返回什么結果就指定對應的返回對象就行,不用關心如何使用Response對象來組織和生成結果。ActionResult 是一個命令模式的例子,這種模式通過存儲和傳遞對象來描述操作。當 MVC 框架從 Action 方法中接收到一個 ActionResult 對象,它調用這個對象的 ExecuteResult 方法,其內部是通過 Response 對象來返回我們想要的輸出結果。?MVC框架包含了許多 ActionResult 類型,這些類型都繼承自 ActionResult 類,大部分在 Controller 類中都有簡便的方法:
? ??
? ? ?除了該表列出來的,還有ContentResult、FileResult、JsonResult?和?JavaScriptResult。
5、從Action傳遞數據到View中的幾種方式:
- View Model對象:
- ViewBag,是一個動態(dynamic)的弱類型,在程序運行的時候解析,是 MVC3 中新增的特性,只在當前View有效。
- ViewData,是一個字典集合,也是只在當前View有效,性能比 ViewBag 高,但是使用的時候需要類型轉換。
- TempData,也是字典集合,一般用于兩個請求之間臨時緩存內容或頁面間傳遞消息,保存在 Session 中,使用完以后則從 Session 中被清除。
? ?一般在當前 View 中使用 ViewBag 或 ViewData,在兩個請求之間傳遞臨時數據用 TempData。由于 TempData 被使用后即被釋放,所以如果要二次使用 TempData 中的數據就需要將其存到其他變量中。
轉載于:https://www.cnblogs.com/wangwust/p/6386849.html
總結
以上是生活随笔為你收集整理的【ASP.NET MVC 学习笔记】- 10 Controller和Action(1)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Sublime Text 3 快捷键汇总
- 下一篇: Fiddler插件开发 - 实现网站离线