理解ASP.NET MVC中的ActionResult

在ASP.NET MVC項目中,我們創建一個Controller的時候,Index()方法默認的返回類型都是ActionResult,通過查看UML圖,ActionResult實際上是一個抽象類,因此實際返回的類型是該抽象類的子類。通過我們在代碼中編寫,不難看到如下的一段代碼:

public ActionResult Index()

{

      return View();

}

理解ASP.NET MVC中的ActionResult

ActionResult的子類名稱說明

  ViewResult表示一個視圖結果,它根據視圖模板產生應答內容。對應Controller方法爲View。

  EmptyResult返回一個空的結果。如果控制器方法返回一個null,MVC將其轉換成EmptyResult對象

  RedirectResult表示一個連接跳轉,相當於ASP.NET中的Response.Redirect方法。對應的Controller方法爲Redirect  

       JsonResult表示一個JSON結果。MVC將Response.ContentType設置爲application/json,並通過JavaScriptSerializer類將指定對象序列化爲Json表示方式。需要注意,默認情況下,MVC不允許GET請求返回JSON結果,要解除此限制,在生成JsonResult對象時,將其JsonRequestBehavior屬性設置爲JsonRequestBehavior.AllowGet。此結果對應的Controller方法爲Json。       RedirectToRouteResult:同樣表示一個調轉,MVC會根據我們指定的路由名稱或路由信息(RouteValueDictionary)來生成Url地址,然後調用Response.Redirect跳轉。對應的Controller方法爲RedirectToAction和RedirectToRoute。
     PartialViewResult: 表示一個部分視圖結果,與ViewResult本質上一致,只是部分視圖不支持母版,對應於ASP.NET,ViewResult相當於一個Page,而PartialViewResult則相當於一個UserControl。它對應的Controller方法爲PartialView。
    HttpUnauthorizedResult: 表示一個未經授權訪問的錯誤。MVC會向客戶端發送一個401的應答狀態。如果在web.config中開啓了表單驗證(authentication mode="Forms"),則401狀態會將Url轉向指定的loginUrl鏈接。

  JavaScriptResult本質上是一個文本內容,只是將Response.ContentType設置爲 application/x-javascript,此結果應該和MicrosoftMvcAjax.js腳本配合使用,客戶端接收到Ajax應答後,將判斷Response.ContentType的值,如果是application/x-javascript,則直接eval執行返回的應答內容。此結果類型對應的Controller方法爲JavaScript

  ContentResult返回簡單的純文本內容,可通過ContentType屬性指定應答文檔類型,通過ContentEncoding屬性指定應答文檔的字符編碼。可通過Controller類中的Content方法便捷地返回ContentResult對象。如果控制器方法返回非ActionResult對象,MVC將簡單地以返回對象的ToString()內容爲基礎產生一個ContentResult對象。

  FileContentResult表示一個可以下載的、二進制內容的文件

  FilePathResult表示一個可以下載的、指定路徑的文件

  FileStreamResult表示一個可以下載的、流式的文件
         FilePathResult、FileContentResult、FileStreamResult: 這三個類繼承於FileResult,表示一個文件內容,三者的區別在於,FilePath通過路徑傳送文件到客戶端,FileContent通過二進制數據的方式,而FileStream是通過Stream的方式來傳送。Controller爲這三個文件結果類型提供了一個名爲File的重載方法。

  其實這個View的類型是ActionResult的子類ViewResult,有關Controller中的方法與返回對象請參照下表:

  Controller中的方法返回對象

  ViewViewResult

  RedirectRedirectResult

  RedirectToActionRedirectToActionResult

  RedirectToRouteRedirectToRouteResult

  JsonJsonResult

  JavaScriptResultJavaScriptResult

  ContentContentResult

  FileFileContentResult、FilePathResult、FileStreamResult
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章