日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Controller向View传值方式总结

發布時間:2023/12/9 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Controller向View传值方式总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

From:?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传值方式总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。