各種ActionResult介紹

各種ActionResult介紹

1.ViewResult:用來將View檢視轉譯成Web頁面

public ViewResult Index() { return View(); } 

2.PartialViewResult:用來轉譯部分檢視

public PartialViewResult Index(){ return PartialView("Simple") ;}//指定部分檢視名稱Simple

3.ContentResult:用來回傳自訂類別內容,而且是純文字的內容,如:HTML、JS、CSS等

public ContentResult Index(){

  return Content("TestContent"); //回傳文字

  //return Content("<h1>TestContent</h1>","text/html");//回傳HTML

  //return Content("<script>alert('TestContent');</script>","application/javascript");//回傳JS

}

4.EmptyResult:回傳null結果,Controller沒有內建呼叫的方法,必須用new EmptyResult(),以下三個回傳方式都是相同的

public EmptyResult NotFound(){

  return new EmptyResult();

  //return empty;

  //return null;

}

5.JavaScriptResult:回傳一段JavaScript到Response

public JavaScriptResult Js(){
  return JavaScript("alert('回傳JavaScriptResult')");
}

6.JsonResult:回傳JSON格式的資料

public JsonResult JsonTest(){
  List<Test> test=new List<Test>{
   new Test{ID="0001",Name="Joe",City="Taipei"},
   new Test{ID="0002",Name="Tom",City="Kaohsiung"}
 };
 return Json(test,JsonRequestBehavior.AllowGet);
}

7.FileResult:總共有三種衍生類別

FilePathResult:將檔案內容傳送到Response當作輸出

FileContentResult:將二進位的內容傳送到Response當作輸出

FileStreamResult:使用Stream執行個體將二進位內容傳送到Response當作輸出

雖然共有三種衍生類別,但是在Action當中其實統一使用File方法回傳就可以了

public ActionResult Index()
        {
            string pdfName = @"~/doc/test.pdf";//提供下載的來源檔案路徑及名稱
            string contentType = "application/pdf";//MIME Type
            string downloadName = "123.pdf";//檔案下載到客端的名稱
            return File(pdfName, contentType, downloadName);//統一回傳File方法
        }

8.RedirectResult:共有兩種方法

Redirect:臨時轉向,Http狀態碼為302

RedirectPermanent:永久轉向,Http狀態碼為301

public RedirectResult TempRedirect(){
  return Redirect("/Temp/Test");
}

public RedirectResult NewPage(){
  return RedirectPermanent("https://NewPage.com");
}

9.RedirectToRouteResult:共有兩個方法

RedirectToAction:使用Controller和Action名稱

RedirectToRoute:使用URL作轉向

public ActionResult Index(){
  return RedirectToAction("Details");//使用指定的Action名稱作轉向
  //return RedirectToAction("Details","Home");//使用指定的Controller與Action
  //return RedirectToAction("Details","Home","id=001");//加入URL路由參數,網址為/Home/Details/001
  //return RedirectToRoute(new{controller="Home",action="Details",id=001})//指定URL路由資訊
}

10.HttpStatusCodeResult:用來產生HTTP狀態碼,有HttpNotFound和HttpUnauthorizedResult兩個子類別

public HttpNotFoundResult NotFound(){
  return HttpNotFound();//回傳404狀態碼
}

public HttpUnauthorizedResult Unauthorized(){
  return new HttpUnauthorizedResult("沒有權限,拒絕存取");//回傳401狀態碼
}

額外補充

ActionResult是所有Result的基底類別,所以一般我們在建立Action時候,通常都直接使用ActionResult來概括所有Action

public ActionResult Index(){return View();}

public ViewResult Index(){return View();}

//上面兩個Action的結果都是一樣的