ASP.NET Core MVC 上的幾個傳遞資料到 View 的方法

在 ASP.NET Core MVC 中,request 會先經過 controller,然後資料再傳給 view 來顯示,而在 ASP.NET Core MVC 中可以透過三個變數來傳遞資料。

以下三種是 ASP.NET Core MVC 提供的三個變數:

  • ViewData:型別為 ViewDataDictionary。
  • ViewBag:型別為 DynamicViewData,且 ViewBag 被宣告為 dynamic。
  • TempData:型別為 ITempDataDictionary

在開始之前,請讀者先自行建立一個 ASP.NET Core MVC 專案(包含 controller 的那種)。

ViewData

首先看 ViewData,就把它當成一般的 Dictionary 操作就可以了,像是下列的程式碼:

public IActionResult ViewDataTest()
{
    ViewData["message"] = "this is a messsage from ViewData";
    return View();
}

在 view 中,取用的方式也一樣:

<dir>
    @ViewData["message"]
</dir>

ViewBag

ViewBag 跟前面 ViewData 的差別在於它被宣告為 dynamic,使用的方式如下:

public IActionResult ViewBagTest()
{
    ViewBag.message = "this is a message from ViewBag";
    return View();
}

在 view 中的使用方式:

<dir>
    @ViewBag.message
</dir>

TempData

最後是 TempData,它的操作方式跟 Dictionary 一樣,但跟前面的 ViewData 差別在它的生命週期是一個 request。簡單的說,就是如果在 controller 中有做重導的動作,TempData 裡的資料還會存在,不會消失。請看下列程式碼中的兩個 function:

public IActionResult TempDataTest()
{
    TempData["message"] = "this is a message from TempData";
    return Redirect("SecondPage");
}

public IActionResult SecondPage()
{
    ViewData["message"] = string.Empty;
    if (TempData.ContainsKey("message"))
    {
        ViewData["message"] = TempData["message"];
    }
    return View();
}

從程式碼中可以知道,如果 SecondPage 是從 TempDataTest 導過來的,那 TempData.ContainsKey("message") 就會是 True。

範例參考

參考資料

廣告

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s