MVC Controller返回的幾種類型


  通過學習,我們可以發現,在Controller中提供了很多不同的Action返回類型。
那么具體他們是有什么作用呢?它們的用法和區別是什么呢?通過資料書上的介紹和網上資料的查詢,這里就來給大家列舉和大致的概括下。

(1). ActionResult(base):最基本的Action類型,返回其他類型都可以寫ActionResult。

(2). ContentResult:返回ContentResult用戶定義的內容類型。

public ActionResult Content() { return Content("Test Content", "text/html"); // 可以指定文本類型 } 
  頁面輸出“Test Content”;此類型多用於在ajax操作中需要返回的文本內容。
  還可以添加比如JavaScript腳本(“text/javascript”)和CSS樣式(“text/css”)等,可以修改樣式和js等。
 
(3). EmptyResult返回Null或者Void數據類型的EmptyResult。
public ActionResult Empty() { return null; } 

  返回結果為NULL。

(4). HttpUnauthorizedResult:響應給客戶端錯誤代碼 401(未經授權瀏覽狀態),如果程序啟用了 Forms 驗證,並且客戶端沒有任何身份票據,則會跳轉到指定的登錄頁。

public ActionResult HttpUnauthorizedResult() { return new HttpUnauthorizedResult(); }

(5)JavaScriptResult:返回JavaScriptResult可在客戶端執行的腳本。

public ActionResult JavaScript() { string str = string.Format("alert('{0}');", "彈出窗口"); return JavaScript(str); }
  但這里並不會直接響應彈出窗口,需要用頁面進行再一次調用。
  這個可以方便根據不同邏輯執行不同的js操作。

(6). JsonResult:返回JsonResult序列化的Json對象。

復制代碼
public ActionResult Json() { Dictionary<string, object> dic = new Dictionary<string, object>(); dic.Add("id", 100); dic.Add("name", "hello"); return Json(dic, JsonRequestBehavior.AllowGet); } 
復制代碼
  主要用於返回json格式對象,可以用ajax操作;
  注意:需要設置參數,JsonRequestBehavior.AllowGet。
  否則會提示錯誤:此請求已被阻止,因為當用在 GET 請求中時,會將敏感信息透漏給第三方網站。
  若要允許 GET 請求,請將 JsonRequestBehavior 設置為 AllowGet。

(7). FileResult (base):返回FileResult要寫入響應中的二進制輸出,一般可以用作要簡單下載的功能。

復制代碼
public ActionResult File() { string fileName = "~/Content/test.zip"; // 文件名 string downFileName = "文件顯示名稱.zip"; // 要在下載框顯示的文件名 return File(fileName, "application/octet-stream", downFileName); } 
復制代碼

  直接下載test.zip后保存到本地則為"文件顯示名稱.zip"。

(8). FileContentResult:是針對文件內容創建的FileResult,它只是調用當前HttpResponse的OutputStream屬性的Write方法直接將表示文件內容的字節數組寫入響應輸出流。

(9). FilePathResult:是一個根據物理文件路徑創建FileResult。

(10). FileStreamResult:允許我們通過一個用於讀取文件內容的流來創建FileResult。

  PS:關於File的幾種返回類型的詳細介紹,可以參考園友蔣金楠的博文 “了解ASP.NET MVC幾種ActionResult的本質:FileResult” ,已經寫的很詳細了。

(11). RedirectResult直接轉到指定的url地址。

public ActionResult Redirect() { // 直接返回指定的url地址 return Redirect("http://www.cnblogs.com"); } 

(12). RedirectToRouteResult直接使用 Action Name 進行跳轉,也可以加上ControllerName 以及參數。

public ActionResult RedirectResult() { return RedirectToAction("Index", "Home", new { id = "100", name = "liu" }); } 

(13). RedirectToActionResult指定路由進行跳轉。

public ActionResult RedirectRouteResult() { return RedirectToRoute("Default", new { controller = "Home", action = "Index"}); } 

  其中,Default為global.asax.cs中定義的路由名稱。

(14). ViewResultBase(base)

(15). ViewResult:返回ViewResult視圖結果,將視圖呈現給網頁。

public ActionResult About() { return View(); // 參數可以返回model對象 } 
( 16). PartialViewResult:返回PartialViewResult部分視圖結果,主要用於返回部分視圖內容。
  在View/Shared目錄下創建ViewUserControl.cshtml部分視圖。
public ActionResult UserControl() { ViewBag.Message = "部分視圖"; return PartialView("ViewUserControl"); } 

  頁面調用@ViewBag.Message 將輸出“部分視圖”。

總結:這些返回類型的共同點,那便是對Action有一定的要求:

  • 必須是一個public方法
  • 必須是實例方法
  • 不能被重載
  • 必須返回ActionResult類型


免責聲明!

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



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