每一個Controller的Action方法執行完成最後一定要回傳實作的ActionResult抽象類別的型別,如最常看到的return View();
,其實就是回傳ViewResult的型別。
以下9個是目前Asp.net MVC5繼承ActionResult抽象類別的回傳型別
繼承類別 | Controller方法 | 用途 |
---|---|---|
ContentResult | Content() | 回傳文字內容 |
ViewResult | View() | 回傳HTML |
FileResult | File() | 輸出檔案 |
HttpNotFoundResult | HttpNotFound() | 回應HTTP狀態碼(500、404) |
JsonResult | Json() | 輸出Json |
PartialViewResult | PartialView() | 部分HTML |
RedirectResult | Redirect();RedirectPermanent() | 重新導向URL |
RedirectToRouteResult | RedirectToAction()-RedirectToActionPermanent()-RedirectToRoute()---RedirectToRoutePermanent() | 使用路由,進行URL導向 |
ContentResult Content(string content)
ContentResult Content(string content, string contentType)
ContentResult Content(string content, string contentType, Encoding contentEncoding)
Content :取得或設定內容。
ContentEncoding :取得或設定內容編碼方式。
System.Text.Encoding:https://msdn.microsoft.com/zh-tw/library/system.text.encoding(v=vs.110).aspx
ContentType :取得或設定內容的類型。
MIME:https://zh.wikipedia.org/wiki/%E5%A4%9A%E7%94%A8%E9%80%94%E4%BA%92%E8%81%AF%E7%B6%B2%E9%83%B5%E4%BB%B6%E6%93%B4%E5%B1%95
public ActionResult ContentDemo(){
return Content("Hello World!");
}
public ActionResult ContentDemo(){
return Content("<h1>Hello World!</h1>","text/html");
}
public ActionResult ContentDemo(){
return Content("<h1>こんにちは</h1>","text/html",Encoding.UTF8);
}
EmptyResult類別的ExecuteResult方法沒有實作任何程式碼,表示沒有任何作用的結果,例如不會傳回任何值的控制器動作方法。
EmptyResult SourceCode
protected virtual ActionResult CreateActionResult(ControllerContext controllerContext, ActionDescriptor actionDescriptor, object actionReturnValue) {
if (actionReturnValue == null) {
return new EmptyResult();
}
ActionResult actionResult = (actionReturnValue as ActionResult) ??
new ContentResult { Content = Convert.ToString(actionReturnValue, CultureInfo.InvariantCulture) };
return actionResult;
}
用意在於,在程式碼中直接回傳null並不好,取而代之,遵循了物件導向(OO)的方式,來回傳一個空物件,再MVC裡面即使return null
,MVC也會判斷是EmptyReuslt而將執行方法丟給EmptyResult來回傳。