ASP.NET MVC中控制器

一、理解控制器

中轉作用

  1. 承上啓下,根據用戶輸入,執行響應行爲(動作方法)
  2. 在行爲中調用模型的業務邏輯,並返回給用戶結果(視圖)

中介角色

  1. 分離視圖和模型,讓視圖和模型各司其職,控制器賦值二者交互
  2. 只負責數據的傳送,不負責處理

控制器類

所有的控制器的基類都是Controller,而Controller類重點就是提供ASP.NET MVC網站進行的http請求的方法
而Controller自身具有的基類是ControllerBase

ControllerBase類

  1. Controller類位於System.Web.Mvc命名空間,繼承自ControllerBase類
  2. ControllerBase類實現了Icontroller接口的Execute方法,在路由搜索到相應的控制器及動作方法,Execute方法進入控制器的處理

屬性

  1. ControllerContext:獲取或設置控制器上下文
  2. ValidateRequest:獲取或設置一個值,該值指示是否爲此請求啓用請求驗證
  3. ValueProvider:獲取或設置控制器的值
  4. ViewData:獲取或設置數據的字典
  5. ViewBag:獲取動態視圖數據字典
  6. TempData:獲取或設置可以在不同控制器之間傳遞數據的字典

任務

  1. 定位:找到相應的動作方法
  2. 獲取參數:獲取動作方法的參數
  3. 處理錯誤:在執行動作方法中可能出現的錯誤
  4. 渲染視圖:提供默認的WebFormViewFactory類來渲染ASP.NET視圖

二、動作方法的參數

動作方法參數映射

  1. 在動作方法中使用“參數映射”,參數會自動匹配
  2. 參數映射的好處:再也不需要手工獲取參數並做類型轉換,在多個參數時非常明顯

映射參數的來源

來源 優先級 說明
表單數據 s 表單提交的數據(Request.Form)
路由數據 路由數據(RouteData.Values)
URL數據 URL數據(Request.QueryString)

參數自動映射,按照優先級依次查找參數

動作方法參數要求

  1. 動作方法的參數必須和數據模型中的屬性類型、名稱保持一致(大小寫不區分)
  2. 視圖中的表單name屬性值或URL中鍵值對名稱和數據模型中屬性名稱保持一致
  3. 滿足三方面的命名一致才能實現參數映射
  4. 如果視圖中表單或URL或路由數據只要能夠確保是一個數據模型,那麼就能夠在動作方法中直接使用這個數據模型對象作爲參數

值類型參數映射失敗

解決方案:可以將值類型定義爲可空類型,可選參數

三、動作方法的特性

例如控制器中出現動作方法重載
在這裏插入圖片描述
路由系統不能根據方法參數去定位動作方法

1.Http請求特性

針對請求類型定位方法,解決同名衝突問題

特性名 說明
HttpGet 針對Get請求
HttpPost 針對Post請求
HttpDelete 針對Delete請求
HttpPut 針對Put請求

關於Http謂詞

  1. 特點:經常使用,如果不加上該特性,默認動作方法接收所有謂詞的請求
  2. 一般開發中都會加上謂詞,限定請求謂詞類型

NonAction特性

  1. 可以將控制器中的方法聲明爲“非動作方法”
  2. 對於控制器內部使用的方法非常有用,加上該特性後,外部不能訪問,也可以解決同名方法衝突問題

ActionName特性

  1. 爲動作方法“重命名”,解決同名方法衝突問題
  2. 視圖中使用時,需要修改成“重新命名”後的方法
    注意:當動作方法應用了ActionName特性後,如果動作方法內部使用View()方法調用視圖,(也就是不指定視圖名稱),則調用的是和ActionName值相同的視圖,而不再是原動作方法名稱視圖

四、ActionResult詳解

ActionResultView()
所有的View()方法返回的都是ViewResult對象

名稱 說明
View() 創建一個將視圖呈現給響應的ViewResult對象
View(Object) 使用模型創建一個將視圖呈現給響應的ViewResult對象
View(string) 使用視圖名稱創建一個呈現視圖的ViewResult對象
View(IView) 創建一個呈現指定的IView對象的ViewResult對象
View(string,object) 使用模型創建一個指定視圖名稱的ViewResult對象
View(string,string) 使用視圖名稱和母版頁名稱創建一個將視圖呈現給響應的ViewResult對象
View(IView,object) 創建一個呈現指定的IView對象的ViewResult對象
View(string,string,object) 使用視圖名稱、母版頁、和模型創建一個呈現視圖的ViewResult

返回值是一個抽象類,體現了多態性,多態性解決了實際開發中響應結果爲html、文件等不同內容的輸出

五、動作方法輸出內容

當客戶端不需要輸出HTML,而是文件、文本內容等該怎麼辦

輸出類型 說明 控制器輸出的方法
EmptyResult 沒有返回值,動作方法不需要輸出
ContentResult 將指定內容作爲文本輸出 Conten(string)
JsonResult 輸出JSON字符串 Json(object)
JavaScriptResult 輸出JavaScript文件 JavaScript(string)
RedirectResult 指定的URL來執行重定向 Redirect(string)
RedirectToRouteResult 指定路由值來執行查詢 RedirectToAction(string)
FilePathResult 指定文件路徑來輸出文件 File(string ,string)
FileContentResult 指定字節數組來輸出文件 File(byte[],string)
FileStreamResult 指定流來輸出文件 File(Stream,string)
ViewResult 調用視圖文件輸出視圖 View()

六、隱式動作類型

  1. 動作方法返回值類型可以是ActionResult以外的任意類型
  2. 類型說明
    int類型—>ContentResult類型
    void類型—>EmptyResult類型
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章