ASP.NET MVC中常用的ActionResult類型


一、定義

     MVC中ActionResult是Action的返回結果。ActionResult 有多個派生類,每個子類功能均不同,並不是所有的子類都需要返回視圖View,有些直接返回流,有些返回字符串等。ActionResult是一個抽象類,它定義了唯一的ExecuteResult方法,參數為一個ControllerContext,下面為您介紹MVC中的ActionResult 的用法。

二、什么是ActionResult

     ActionResult是控制器方法執行后返回的結果類型,控制器方法可以返回一個直接或間接從ActionResult抽象類繼承的類型,如果返回的 是非ActionResult類型,控制器將會將結果轉換為一個ContentResult類型。默認的ControllerActionInvoker 調用ActionResult.ExecuteResult方法生成應答結果。

三、常見的ActionResult

     1、ViewResult

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

     2、PartialViewResult

     表示一個部分視圖結果,與ViewResult本質上一致,只是部分視圖不支持母版,對應於ASP.NET,ViewResult相當於一個Page,而PartialViewResult 則相當於一個UserControl。它對應得Controller方法的PartialView.

     3、RedirectResult

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

     4、RedirectToRouteResult

     同樣表示一個跳轉,MVC會根據我們指定的路由名稱或路由信息(RouteValueDictionary)來生成Url地址,然后調用Response.Redirect跳轉。對應的Controller方法為RedirectToAction和RedirectToRoute.

     5、ContentResult

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

     6、EmptyResult

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

     7、JavaScriptResult

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

     8、JsonResult

     表示一個Json結果。MVC將Response.ContentType 設置為application/json,並通過JavaScriptSerializer類指定對象序列化為Json表示方式。需要注意,默認情況下,Mvc不允許GET請求返回Json結果,要解除此限制,在生成JsonResult對象時,將其JsonRequestBehavior屬性設置為JsonRequestBehavior.AllowGet,此結果對應Controller方法的Json.

     9、FileResult(FilePathResult、FileContentResult、FileStreamResult)

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

     FilePathResult: 直接將一個文件發送給客戶端

     FileContentResult: 返回byte字節給客戶端(比如圖片)

     FileStreamResult: 返回流

     10、HttpUnauthorizedResult

     表示一個未經授權訪問的錯誤,MVC會向客戶端發送一個401的應答狀態。如果在web.config 中開啟了表單驗證(authenication mode=”Forms”),則401狀態會將Url 轉向指定的loginUrl 鏈接。

     11、HttpStatusCodeResult

     返回一個服務器的錯誤信息

     12、HttpNoFoundResult

     返回一個找不到Action錯誤信息

四、ActionResult子類之間的關系表

    

五、ActionResult(12種)的簡單應用

     源碼:

 1 using StudyMVC4.Models;  2 using System;  3 using System.Collections.Generic;  4 using System.IO;  5 using System.Linq;  6 using System.Net;  7 using System.Net.Http;  8 using System.Web.Http;  9 using System.Web.Mvc;  10 
 11 namespace StudyMVC4.Controllers  12 {  13     public class HomeController : Controller  14  {  15        
 16         public ActionResult Index() {  17             return View();  18  }  19 
 20         /// <summary>
 21         /// ContentResult用法(返回文本)  22         /// http://localhost:30735/home/ContentResultDemo  23         /// </summary>
 24         /// <returns>返回文本</returns>
 25         public ActionResult ContentResultDemo(){  26             string str = "ContentResultDemo!";  27             return Content(str);  28  }  29 
 30         /// <summary>
 31         /// EmptyResult的用法(返回空對象)  32         /// http://localhost:30735/home/EmptyResultDemo  33         /// </summary>
 34         /// <returns>返回一個空對象</returns>
 35         public ActionResult EmptyResultDemo (){  36             return new EmptyResult();  37  }  38 
 39         /// <summary>
 40         /// FileContentResult的用法(返回圖片)  41         /// http://localhost:30735/home/FileContentResultDemo  42         /// </summary>
 43         /// <returns>顯示一個文件內容</returns>
 44         public ActionResult FileContentResultDemo() {  45             FileStream fs = new FileStream(Server.MapPath(@"/Images/001.jpg"), FileMode.Open, FileAccess.Read);  46             byte[] buffer = new byte[Convert.ToInt32(fs.Length)];  47             fs.Read(buffer, 0, Convert.ToInt32(fs.Length));  48             string contentType = "image/jpeg";  49             return File(buffer, contentType);  50  }  51       
 52         /// <summary>
 53         /// FilePathResult的用法(返回圖片)  54         /// http://localhost:30735/home/FilePathResultDemo/002  55         /// </summary>
 56         /// <param name="id">圖片id</param>
 57         /// <returns>直接將返回一個文件對象</returns>
 58         public FilePathResult FilePathResultDemo(string id)  59  {  60             string path = Server.MapPath(@"/Images/"+id +".jpg");  61             //定義內容類型(圖片)
 62             string contentType = "image/jpeg";  63             //FilePathResult直接返回file對象
 64             return File(path, contentType);  65  }  66 
 67         /// <summary>
 68         /// FileStreamResult的用法(返回圖片)  69         /// http://localhost:30735/home/FileStreamResultDemo  70         /// </summary>
 71         /// <returns>返回文件流(圖片)</returns>
 72         public ActionResult FileStreamResultDemo()  73  {  74             FileStream fs = new FileStream(Server.MapPath(@"/Images/001.jpg"), FileMode.Open, FileAccess.Read);  75             string contentType = "image/jpeg";  76             return File(fs, contentType);  77  }  78 
 79         /// <summary>
 80         /// HttpUnauthorizedResult 的用法(拋出401錯誤)  81         /// http://localhost:30735/home/HttpUnauthorizedResult  82         /// </summary>
 83         /// <returns></returns>
 84         public ActionResult HttpUnauthorizedResultDemo()  85  {  86             return new HttpUnauthorizedResult();  87  }  88 
 89         /// <summary>
 90         /// HttpStatusCodeResult的方法(返回錯誤狀態信息)  91         ///  http://localhost:30735/home/HttpStatusCodeResult  92         /// </summary>
 93         /// <returns></returns>
 94         public ActionResult HttpStatusCodeResultDemo() {  95             return new HttpStatusCodeResult(500, "System Error");  96  }  97 
 98         /// <summary>
 99         /// HttpNotFoundResult的使用方法 100         /// http://localhost:30735/home/HttpNotFoundResultDemo 101         /// </summary>
102         /// <returns></returns>
103         public ActionResult HttpNotFoundResultDemo() { 104             return new HttpNotFoundResult("not found action"); 105  } 106 
107        /// <summary>
108        /// JavaScriptResult 的用法(返回腳本文件) 109         /// http://localhost:30735/home/JavaScriptResultDemo 110        /// </summary>
111        /// <returns>返回腳本內容</returns>
112         public ActionResult JavaScriptResultDemo() 113  { 114             return JavaScript(@"<script>alert('Test JavaScriptResultDemo!')</script>"); 115  } 116 
117         /// <summary>
118         /// JsonResult的用法(返回一個json對象) 119         /// http://localhost:30735/home/JsonResultDemo 120         /// </summary>
121         /// <returns>返回一個json對象</returns>
122         public ActionResult JsonResultDemo() 123  { 124             var tempObj = new { Controller = "HomeController", Action = "JsonResultDemo" }; 125             return Json(tempObj); 126  } 127 
128         /// <summary>
129         /// RedirectResult的用法(跳轉url地址) 130         /// http://localhost:30735/home/RedirectResultDemo 131         /// </summary>
132         /// <returns></returns>
133         public ActionResult RedirectResultDemo() 134  { 135             return Redirect(@"http://wwww.baidu.com"); 136  } 137 
138         /// <summary>
139         /// RedirectToRouteResult的用法(跳轉的action名稱) 140         /// http://localhost:30735/home/RedirectToRouteResultDemo 141         /// </summary>
142         /// <returns></returns>
143         public ActionResult RedirectToRouteResultDemo() 144  { 145             return RedirectToAction(@"FileStreamResultDemo"); 146  } 147 
148         /// <summary>
149         /// PartialViewResult的用法(返回部分視圖) 150         /// http://localhost:30735/home/PartialViewResultDemo 151         /// </summary>
152         /// <returns></returns>
153         public PartialViewResult PartialViewResultDemo() 154  { 155             return PartialView(); 156  } 157 
158        /// <summary>
159        /// ViewResult的用法(返回視圖) 160         ///  http://localhost:30735/home/ViewResultDemo 161        /// </summary>
162        /// <returns></returns>
163         public ActionResult ViewResultDemo() 164  { 165             //如果沒有傳入View名稱, 默認尋找與Action名稱相同的View頁面.
166             return View(); 167  } 168  } 169 }

 

 

 文章轉載自:https://www.cnblogs.com/xielong/p/5940535.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM