MVC中的Action方法的返回值一般有以下幾種:
類型 |
s說明 |
EmptyResult |
不進行任何操作 |
ContentResult |
將指定內容作為文本輸出 |
JsonResult |
輸出JSON字符串 |
JavaScriptResult |
輸出JavaScript |
RedirecResult、RedirectToRouteResult |
重定向到給定的URL中 |
FileResult(抽象類)FilePathResult、FileContentResult、FileStreamResult |
文件輸出 |
ViewResultBase(抽象類)ViewResult、PartialViewResult |
調用視圖輸出 |
Controller控制器代碼如下:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using System.IO; namespace MvcActionReturnType.Controllers { public class HomeController : Controller { /// <summary> /// 1、返回一個ViewResult對象 /// </summary> /// <returns></returns> public ActionResult Index() { return View(); } /// <summary> /// 2、返回一個json格式的數據 /// </summary> /// <returns></returns> public ActionResult Json() { var book = new { BookId = 1, BookName = "MVC框架" }; return Json(book, JsonRequestBehavior.AllowGet); } /// <summary> /// 3、返回JavaScript /// </summary> /// <returns></returns> public ActionResult JavaScript() { string js = "<script>alert('Welcome to ASP.NET MVC')</script>"; return JavaScript(js); } /// <summary> /// 4、返回FilePath /// </summary> /// <returns></returns> public ActionResult FilePath() { //return File("~/Content/校長 - 帶你去旅行.mp3", "audio/mp3"); return new FilePathResult("~/Content/校長 - 帶你去旅行.mp3", "audio/mp3"); } /// <summary> /// 5、返回FileContent /// </summary> /// <returns></returns> public ActionResult FileContent() { string content = "Welcome To ASP.NET MVC"; byte[] contents = System.Text.Encoding.UTF8.GetBytes(content); return File(contents, "text/plain"); } /// <summary> /// 6、返回FileStream /// </summary> /// <returns></returns> public ActionResult FileStream() { string content = "Welcome To ASP.NET MVC"; byte[] contents = System.Text.Encoding.UTF8.GetBytes(content); FileStream fs = new FileStream(Server.MapPath("~/Content/2 開發環境下載安裝說明.doc"), FileMode.Open); return File(fs, "application/msword"); } /// <summary> /// 7、返回 ContentResult /// </summary> /// <returns></returns> public ActionResult ContentResult() { string content = "<h1>Welcome To ASP.NET MVC</h1>"; return Content(content); } public ActionResult About() { ViewBag.Message = "Your application description page."; return View(); } public ActionResult Contact() { ViewBag.Message = "Your contact page."; return View(); } } }
視圖代碼如下:
@{ ViewBag.Title = "Home Page"; } <div> 1.輸出json <p> @Html.ActionLink("生成Json", "Json"); </p> 2.輸出js <script src=@Url.RouteUrl(new { action="JavaScript"}) type="text/javascript"> </script> <p> @(Url.RouteUrl(new { controller = "home", action = "JavaScript" })); @Html.ActionLink("生成JavaScript", "JavaScript"); </p> 3.播放音樂 <p> @Html.ActionLink("播放MP3", "FilePath"); </p> 4.查看文本文件 <p> @Html.ActionLink("查看文件內容", "FileContent"); </p> 5.鏈接文件流 <p> @Html.ActionLink("訪問Doc", "FileStream"); </p> 6.輸出文本 <p> @Html.ActionLink("輸出文本", "ContentResult"); </p> </div>
請看下面的兩段代碼:
public int Sum(int num1, int num2)
{
int sum = num1 + num2;
return sum;
}
public ActionResult Sum2(int num1, int num2)
{
int sum = num1 + num2;
return Content(sum.ToString());
}
有些時候,我們希望把Action定義成一種更自然的形式,比如我們希望Action Sum2做一個求和的計算,傳入的參數是整數,計算的結果也是整數,那么可不可以返回一個整數的結果呢?
如上面的兩個方法所示,兩個方法的效果是等價的,也就是會把整形的數據轉換成字符串類型,然后封裝成ContentResult類型,這個過程是MVC框架自動幫助我們完成的。
返回的值 |
說明 |
null |
EmptyResult |
void |
EmptyResult |
對象(ActionResult之外的類型) |
ContentResult |
在Action方法中,任何類型的返回值都是可以的,如果他不是ActionResult類型,會封裝成ActionResult類型的對象,如上表所示。