iT邦幫忙

2022 iThome 鐵人賽

DAY 26
1
Software Development

C# ASP.NET MVC實作: 30天打造屬於你的網站應用程式系列 第 26

(DAY 26)C# ASP .NET MVC實作: 30天打造屬於你的網站應用程式-各種ActionResult

  • 分享至 

  • xImage
  •  

今天來講講各種ActionResult的型別,我們在DAY 3最後面的時候有說到,ActionResult類別其實是所有動作方法結果的基底類別,有許多的動作方法結果同樣是繼承ActionResult的。下面表格整理了一些ActionResult對應的動作方法返回結果:

ActionResult 動作方法返回結果 說明
ViewResult View() 顯示為網頁
PartialViewResult PartialView() 顯示部分檢視
RedirectResult Redirect() 重新導向到指定URL
RedirectToRouteResult RedirectToAction() / RedirectToRoute() 重新導向到指定動作方法
ContentResult Content() 回傳指定型別文字檔內容
JsonResult Json() 回傳JSON物件
HttpNotFoundResult HttpNotFound() 回傳Http Erorr-404訊息
FileResult File() 回傳檔案內容
EmptyResult null 回傳空值(null)結果

接著我們針對幾個常用到的ActionResult舉幾個範例來實際說明:

● ViewResult

ViewResult型別會回傳指定的檢視頁面,當不指定檢視頁面名稱時,則回傳與動作方法同名的檢視頁面。

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

@{
    ViewBag.Title = "ViewResult";
}

<h2>ViewResult</h2>

<div>
    這是一個ViewResult的檢視頁面
</div>

回傳檢視頁面可以攜帶物件model,在檢視頁面裡透過Razor語法將物件內容呈現出來。

        public List<Member> GetMembers()
        {
            var members = new List<Member>();
            members.Add(new Member { Id = 1, Name = "Amy", Age = 18 });
            members.Add(new Member { Id = 2, Name = "Bob", Age = 54 });
            members.Add(new Member { Id = 3, Name = "Carol", Age = 27 });

            return members;
        }
        // GET: ActionResult
        public ViewResult Index()
        {
            var model = GetMembers();
            return View(model);
        }

以上在前面天數的範例已經做到快爛掉啦~就不再多說了。

● PartialViewResult

PartialViewResult型別會回傳部分檢視的頁面,範例如下:

        public PartialViewResult ShowPartial()
        {
            return PartialView();
        }

@{
    ViewBag.Title = "ShowPartial";
}

<h2>ShowPartial</h2>

<div>
    這是部分檢視的頁面,所以沒有Layout哦~
</div>

如下圖所示,雖然在加入檢視時有勾選「使用版面配置頁」,但執行時會發現Layout版面沒有了,僅會有原本HTML的頁面。

應用上會在View頁面裡使用@Html.Action()方法來叫用PartialViewResult動作方法,將PartialView組合加入至原本的View中,如下Code示範:

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

@{
    ViewBag.Title = "ViewResult";
}

<h2>ViewResult</h2>

<div>
    這是一個ViewResult的檢視頁面
</div>

@Html.Action("ShowPartial")

● RedirectToRouteResult

動作方法回傳RedirectToRouteResult型別表示會依照指定路徑值執行重新導向的結果,例如系列文章前面常用到的RedirectToAction,可以指定重新導向到哪個動作方法,如下Code:

        public RedirectToRouteResult BackToIndex()
        {
            return RedirectToAction("Index");
        }

另外一種回傳方式是使用RedirectToRoute,重新導向到指定路由位置,下面範例是搭配啟用屬性路由的情況:

    [RoutePrefix("Main")]
    public class ActionResultController : Controller
    {
        [Route("MyHome")]
        public ViewResult Index()
        {
            return View();
        }
        public PartialViewResult ShowPartial()
        {
            return PartialView();
        }

        public RedirectToRouteResult BackToIndex()
        {
            return RedirectToRoute("Main/MyHome");
        }
    }

● ContentResult

動作方法回傳ContentResult型別可以用來回傳文字內容,回傳結果除了字串內容以外,也可以指定內容類型與編碼,如下Code示範:

        public ContentResult GetContent()
        {
            return Content("<h2 style=\"color:red\">あああああ</h2>", "text/html",Encoding.UTF8);
        }


當指定內容類型為text/html時,就可以依照字串內容轉成HTML格式了,另外遇到外國語言可以指定內容編碼以正確顯示內容。

● JsonResult

Json()方法可以將物件轉成JSON格式,使用時須搭配JsonRequestBehavior.AllowGet以允許用戶端的HTTP GET要求,範例如下:

        public JsonResult GetJson()
        {
            var members = new List<Member>();
            members.Add(new Member { Id = 1, Name = "Amy", Age = 18 });
            members.Add(new Member { Id = 2, Name = "Bob", Age = 54 });
            members.Add(new Member { Id = 3, Name = "Carol", Age = 27 });
            return Json(members,JsonRequestBehavior.AllowGet);
        }


關於JSON格式的介紹與應用,預計在DAY 28會開一篇來說明~

● HttpNotFoundResult

HttpNotFoundResult很好懂,直接參考範例比較快:

        public HttpNotFoundResult Oops()
        {
            return HttpNotFound("找不到指定網頁內容 Q_Q");
        }


HTTP 404或Not Found錯誤訊息是HTTP的其中一種「標準回應訊息」,代表客戶端在瀏覽網頁時,伺服器無法正常提供訊息,或是伺服器無法回應且不知原因。通常是因為使用者所存取的對應網頁已被刪除、移動或從未存在。
https://zh.wikipedia.org/zh-tw/HTTP_404

● 小結

經過以上可以瞭解,動作方法不僅僅是可以回傳我們在前面常用到的View檢視頁面或重新導向,也還有許多可以回傳的結果,不過我們在撰寫動作方法時用ActionResult比較方便就是了~那麼今天就講到這邊,我們明天見!


上一篇
(DAY 25)C# ASP .NET MVC實作: 30天打造屬於你的網站應用程式-路由(Route)
下一篇
(DAY 27)C# ASP .NET MVC實作: 30天打造屬於你的網站應用程式-自訂Helper
系列文
C# ASP.NET MVC實作: 30天打造屬於你的網站應用程式30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言