Controller向View傳值方式總結

來源:互聯網
上載者:User

標籤:

http://www.cnblogs.com/guohu/p/4377974.html

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

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

 

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

我們一般會向頁面傳遞一個主要的類型的資料,一般是情況下是一個List<Model>,如果只有這個,很好辦,一個model對象就解決了,但是往往除此之外還會有一些額外的零散的資料需要傳遞,比如分頁的pageIndex,或者pageCount等等,這樣的資料用原有的model就無能為力了,這時候,我們就可以用ViewBag、ViewData、TempData來傳遞這些額外的資料。

 

ViewBag、ViewData、TempData之間的差別:

ViewData與ViewBag之間非常相似,兩者使用的情境基本一致,但是ViewData的類型是很明確的,使用的時候經常需要強制類型轉換,而ViewBag的類型是動態,不確定的,直接就可以使用,他們的傳值範圍是:controller向view傳值,view自己和自己傳值。而TempData存在的目的就是為了防止redirect時候資料的丟失,所以它的傳值範圍是當前controller和跳轉後的controller之間。

 

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

ViewBag                                                                                    

我們可以認為 ViewBag=ViewData+Dynamic wrapper around the ViewData ,接下來你就可以體會到這個公式的含義了。

1、conroller向view傳值

 

2、view向view傳值:

 

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

 

 

 

ViewData                                                                                  

1、ViewData的基本用法

 

2、ViewData 轉換成 ViewBag:

 

3、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                                                             

 1、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>
 

 

2、Razor Engine的實現:

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

 

Controller向View傳值方式總結

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.