2017年4月13日 星期四

[C#][MVC][.NET] ViewData、ViewBag、TempData

在工作上爾爾會用到ViewData、ViewBag、TempData就寫一篇來記錄,資料從後端Controller傳到View,可以使用ViewModul之外還可以使用ViewData、ViewBag、TempData。


ViewData、ViewBag、TempData 三者的應用:

  • ViewData 該頁面傳遞參數。
  • ViewBag 可以動態產生 動態屬性 (dynamic型別)傳遞參數。
  • TempData 可跨Action傳遞參數。


展示三種範例:

  • 一般傳遞參數
  • Object傳遞參數
  • 跨Action傳遞參數


ViewData、ViewBag、TempData 一般傳遞參數
Controller
    public ActionResult Index()
        {
            ViewData["message"] = "訊息";
            ViewBag.message = "訊息";
            TempData["message"] = "訊息";
            return View();
        }

View
<h2>Index</h2>
ViewData = @ViewData["message"]  <br />
ViewBag = @ViewBag.message <br />
TempData = @TempData["message"] 

執行結果



ViewData、ViewBag、TempData Object傳遞參數

Model
新增一個 Product.cs
    public class Product
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Type { get; set; }
    }

Controller
    public ActionResult Index()
        {
            Product product = new Product();
            product.Id = 2;
            product.Name = "草莓大福";
            product.Type = "K001";


            ViewBag.Product = product;
            ViewData["product"] = product;
            TempData["product"] = product;

            return View();
        }

View
@using Models;
@{
    //ViewBag
    Product ViewBagProduct = ViewBag.Product;
    //ViewData
    Product ViewDataProduct = (Product)ViewData["product"];
    //TempData
    Product TempDataProduct = (Product)TempData["product"];
}

<h2>Index</h2>
ViewBag:@ViewBagProduct.Name  <br />
ViewData:@ViewDataProduct.Name <br />
TempData = @TempDataProduct.Name

執行結果



ViewData、ViewBag、TempData 跨Action傳遞參數
Controller
        public ActionResult Index()
        {
            ViewData["Index"] = "ViewData IndexPage";
            ViewBag.Index = "ViewBag IndexPage";
            TempData["Index"] = "TempData IndexPage";
            return RedirectToAction("TempDataPage");
        }

View
新增TempDataPage.cshtml
<h2>TempDataPage</h2>
ViewData = @ViewData["Index"]  <br />
ViewBag = @ViewBag.Index <br />
TempData = @TempData["Index"]

執行結果



沒有留言:

張貼留言