網(wǎng)站首頁 編程語言 正文
一、通過ViewData傳值
MVC從開始版本就一直支持使用ViewData將Controller里面的數(shù)據(jù)傳遞到View。ViewData定義如下:
從上面的截圖中可以看出,ViewData里面存的是字典類型的數(shù)據(jù),在查看ViewDataDictionary的定義:
注意:ViewDataDictionary繼承自IDictionary等接口,所以ViewData里面的Value值類型是object的,使用的時(shí)候需要進(jìn)行類型轉(zhuǎn)換。
Controller代碼如下:
using MVCPassValue.Models; using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace MVCPassValue.Controllers { public class ViewDataDemoController : Controller { // GET: ViewDataDemo public ActionResult Index(int? id) { //1、將字符串傳遞到View ViewData["Other"] = "通過ViewData傳遞字符串"; // 2 ViewData.Add(new KeyValuePair("Id", id ?? -1)); //3 ViewData.Add("name", "tom"); //4、將集合傳遞到View ViewData["Student"] = new List () { new Student { ID = 1, Name = "唐僧", Age = 34, Sex = "男", Email = "747976523@qq.com" }, new Student { ID = 2, Name = "孫悟空", Age = 635, Sex = "男", Email = "sunwukong@163.com" }, new Student { ID = 3, Name = "白骨精", Age = 4532, Sex = "女", Email = "74345523@qq.com" } }; return View(); } } }
View視圖如下:
@using MVCPassValue.Models; @{ ViewBag.Title = "Index"; } @{ // 這里是使用的Razor語法,寫的C#代碼 var stuViewData = ViewData["Student"] as List;//ViewData的value值是object類型的,這里需要進(jìn)行類型轉(zhuǎn)換 var other = ViewData["Other"]; }
Controller通過ViewData向View傳遞數(shù)據(jù)1、傳遞字符串 other:@other;2、傳遞字符串 Id:@ViewData["Id"];3、傳遞字符串 name:@ViewData["name"];4、傳遞集合 @foreach (var item in stuViewData) {ID:@item.ID??Name:@item.Name??Age:@item.Age??Sex:@item.Sex??Email:@item.Email}
運(yùn)行結(jié)果:
二、通過ViewBag傳值
ViewBag是在MVC3中出現(xiàn)的,ViewBag是動(dòng)態(tài)(dynamic)類型的。
Controller代碼:
using MVCPassValue.Models; using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace MVCPassValue.Controllers { public class ViewBagDemoController : Controller { // GET: ViewBagDemo public ActionResult Index(int? id) { //1、將字符串傳遞到View ViewData["Other"] = "通過ViewData傳遞字符串"; // 2 ViewData.Add(new KeyValuePair("Id", id ?? -1)); //3 ViewData.Add("name", "tom"); //4、將集合傳遞到View ViewData["Student"] = new List () { new Student { ID = 1, Name = "唐僧", Age = 34, Sex = "男", Email = "747976523@qq.com" }, new Student { ID = 2, Name = "孫悟空", Age = 635, Sex = "男", Email = "sunwukong@163.com" }, new Student { ID = 3, Name = "白骨精", Age = 4532, Sex = "女", Email = "74345523@qq.com" } }; #region 2、通過ViewBag傳值 ViewBag.name = "ViewBag"; ViewBag.Stu1 = new Student() { ID = 5, Name = "沙悟凈", Age = 567, Sex = "男", Email = "4567890345@qq.com" }; #endregion return View(); } } }
Index視圖代碼:
@using MVCPassValue.Models; @{ ViewBag.Title = "Index"; } @{ var stuViewData = ViewData["Student"] as List;//ViewData的value值是object類型的,這里需要進(jìn)行類型轉(zhuǎn)換 var other = ViewData["Other"]; } @{ var name = ViewBag.name; var stu = ViewBag.Stu1;//ViewBag是dynamic類型的,使用的時(shí)候不需要進(jìn)行類型轉(zhuǎn)換 var stuList = ViewBag.Student; }
Controller通過ViewData向View傳遞數(shù)據(jù)傳遞字符串 ViewData["name"]:@ViewData["name"];
Controller通過ViewBag向View傳遞數(shù)據(jù)1、傳遞字符串 ViewBag.name:@name;2、輸出stuID:@stu.ID??Name:@stu.Name??Age:@stu.Age??Sex:@stu.Sex??Email:@stu.Email3、輸出stuList @foreach (var item in stuList) {ID:@item.ID??Name:@item.Name??Age:@item.Age??Sex:@item.Sex??Email:@item.Email}
運(yùn)行結(jié)果;
看了上面的運(yùn)行結(jié)果,你可能會(huì)提出如下的兩個(gè)疑問:
1、Controller里面沒有定義ViewBag.Student,為什么在這里可以使用呢?
這是因?yàn)閂iewBag是從MVC3版本才開始出現(xiàn)的,為了兼容以前的ViewData,所以這里雖然沒有定義ViewBag.Student,但是ViewBag可以使用ViewData里面定義的Student。
2、ViewData["name"]和ViewBag.name的值是一樣的
在控制器里面明明設(shè)置的兩個(gè)值是不同的,但是為什么這里都變成一樣的了呢?這是因?yàn)閂iewData和ViewBag的屬性是重疊的,兩者都是字典類型的,一切以后面定義的屬性為準(zhǔn),即后面定義的會(huì)覆蓋前面定義的。
三、通過TempData傳值
先來看看下面的代碼:
using MVCPassValue.Models; using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace MVCPassValue.Controllers { public class TempDataDemoController : Controller { // GET: TempDataDemo public ActionResult Index() { ViewData["Name"] = "tom"; ViewBag.Name = "Jon"; TempData["Name"] = "Andi"; TempData["Stu"] = new Student() { ID = 5, Name = "沙悟凈", Age = 567, Sex = "男", Email = "4567890345@qq.com" }; return View(); } } }
index視圖代碼:
@using MVCPassValue.Models; @{ ViewBag.Title = "Index"; } @{ var stu = TempData["Stu"] as Student; }
傳遞字符串 ViewData["Name"]:@ViewData["Name"];
1、傳遞字符串 ViewBag.Name:@ViewBag.Name;
1、傳遞字符串 TempData["Name"]:@TempData["Name"];2、輸出stuID:@stu.ID??Name:@stu.Name??Age:@stu.Age??Sex:@stu.Sex??Email:@stu.Email
允許結(jié)果:
從上面的結(jié)果中可以看出:TempData的屬性值不會(huì)覆蓋上面定義的屬性值。那TempData還有什么作用呢?在看下面的代碼:
using MVCPassValue.Models; using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace MVCPassValue.Controllers { public class TempDataDemoController : Controller { // GET: TempDataDemo public ActionResult Index(int? id) { ViewData["Name"] = "tom"; ViewBag.Name = "Jon"; TempData["Name"] = "Andi"; TempData["Stu"] = new Student() { ID = 5, Name = "沙悟凈", Age = 567, Sex = "男", Email = "4567890345@qq.com" }; if (id == null) return RedirectToAction("TempDataTest"); else return View(); } public ActionResult TempDataTest() { return View(); } } }
TempDataTest視圖代碼:
@using MVCPassValue.Models; @{ ViewBag.Title = "TempDataTest"; } @{ var stu = TempData["Stu"] as Student; }TempDataTest
ViewData["id"]:@ViewData["Id"]
ViewData["Name"]:@ViewData["Name"]
TempData["Name"]:@TempData["Name"];
ID:@stu.ID??Name:@stu.Name??Age:@stu.Age??Sex:@stu.Sex??Email:@stu.Email
運(yùn)行結(jié)果:
你會(huì)發(fā)現(xiàn)這時(shí)ViewData取不到數(shù)據(jù)了,只有TempData可以取到數(shù)據(jù),可以得出TempData和ViewData、ViewBag的區(qū)別:
TempData是基于session存儲(chǔ)的,單次請(qǐng)求數(shù)據(jù)不丟失(ViewData和ViewBag會(huì)丟失),后臺(tái)跨頁面?zhèn)髦担荒苡靡淮?/p>
四、Model傳值
controller代碼:
using MVCPassValue.Models; using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace MVCPassValue.Controllers { public class ModelDemoController : Controller { // GET: ModelDemo public ActionResult Index() { return View(new Student() { ID = 5, Name = "沙悟凈", Age = 567, Sex = "男", Email = "4567890345@qq.com" }); } } }
index視圖代碼:
@{ ViewBag.Title = "Index"; } @Model Student;Index
ID:@Model.ID
Name:@Model.Name
Age:@Model.Age
Sex:@Model.Sex
Email:@Model.Email
運(yùn)行結(jié)果:
原文鏈接:https://www.cnblogs.com/dotnet261010/p/8860057.html
相關(guān)推薦
- 2022-08-03 python中的三種注釋方法_python
- 2022-12-06 Python基礎(chǔ)globlal?nonlocal和閉包函數(shù)裝飾器語法糖_python
- 2022-07-06 如何在React項(xiàng)目中優(yōu)雅的使用對(duì)話框_React
- 2022-11-11 Android利用Canvas類繪制圖形_Android
- 2022-06-01 Python全角與半角之間相互轉(zhuǎn)換的方法總結(jié)_python
- 2023-01-21 VmWare安裝Centos后配置Net網(wǎng)絡(luò)SSH鏈接問題及解決_VMware
- 2022-07-31 如何理解C++指針常量和常量指針_C 語言
- 2023-03-13 pandas行和列的獲取的實(shí)現(xiàn)_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支