Controller向View傳值方式總結

總結髮現ASP.NET MVC中Controller向View傳值的方式共有6種,分別是:程序員

  • ViewBag
  • ViewData
  • TempData
  • 向普通View頁面傳一個Model對象
  • 向強類型頁面傳傳一個Model對象
  • 用一個ViewModel對象解決全部問題

 

首先咱們須要明確的是咱們從controller向view傳值的時候,這些方式分別處於什麼樣的地位:app

咱們通常會向頁面傳遞一個主要的類型的數據,通常是狀況下是一個List<Model>,若是隻有這個,很好辦,一個model對象就解決了,可是每每除此以外還會有一些額外的零散的數據須要傳遞,好比分頁的pageIndex,或者pageCount等等,這樣的數據用原有的model就無能爲力了,這時候,咱們就能夠用ViewBag、ViewData、TempData來傳遞這些額外的數據。spa

 

ViewBag、ViewData、TempData之間的差異:3d

ViewData與ViewBag之間很是類似,二者使用的場景基本一致,可是ViewData的類型是很明確的,使用的時候常常須要強制類型轉換,而ViewBag的類型是動態的,不肯定的,直接就可使用,他們的傳值範圍是:controller向view傳值,view本身和本身傳值。而TempData存在的目的就是爲了防止redirect時候數據的丟失,因此它的傳值範圍是當前controller和跳轉後的controller之間。code

 

下面來詳細的講述他們的具體用法:orm

ViewBag                                                                                    對象

咱們能夠認爲 ViewBag=ViewData+Dynamic wrapper around the ViewData ,接下來你就能夠體會到這個公式的含義了。blog

一、conroller向view傳值教程

 

二、view向view傳值:ci

 

三、利用ViewBag傳遞一個對象:

 

 

 

ViewData                                                                                  

一、ViewData的基本用法

 

二、ViewData 轉換成 ViewBag:

 

三、ViewBag 轉換成 ViewData:

 

 

 

TempData                                                                                

TempData用於在Redirect的時候保存數據,ViewData、ViewBag在跳轉後就會變成null,可是TempData不會,下面是TempData的用法示例:

複製代碼
public ActionResult Index()
{
  var model = new Review()
            {
                Body = "Start",
                Rating=5
            };
    TempData["ModelName"] = model;
    return RedirectToAction("About");
}
<pre><pre lang="cs">public ActionResult About()
{
    var model= TempData["ModelName"];
    return View(model);
}
複製代碼

 

 

 

普通頁面傳遞model:                                                                

複製代碼
//Action代碼
public ActionResult Index()
{
  Product p = new Product();
  p.Name = "Toy";
  return View(p);
}
 

在View中調用的代碼: 
Product : <%: ((Product)Model).Name %>
複製代碼

 

 

 

向強類型試圖傳遞model                                                             

 一、WebForm Engine的試圖的實現:

複製代碼
//Aciton的代碼
public ActionResult Index()
{
  Product p = new Product();
  p.Name = "Toy";
  return View(p);
}


View中的代碼
聲明類型
<%@ Page Inherits="System.Web.Mvc.ViewPage<Product>" %>

直接用Model調用該對象
<h2> Product Name: <%: Model.Name %> </h2>
 
複製代碼

 

二、Razor Engine的實現:

在Razor中聲明類型的方式:
@model Mvc3App.Models.Product
 
在Razor中調用對象的方式:
<h2> Product: @Model.Name </h2>

 程序員的基礎教程:菜鳥程序員

相關文章
相關標籤/搜索