问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

ViewBag和ViewData怎么 才能跨控制器传值

发布网友 发布时间:2022-09-25 17:32

我来回答

1个回答

热心网友 时间:2023-09-19 13:51

最近在开发项目中,使用的是ASP.NET MVC由于之前并没有接触,对于它的传值方式有些陌生,在这里进行初步总结积累学习!

一:使用

ViewData使用:

[csharp] view plain copy print?
public ActionResult Index()
{
List<string> colors = new List<string>();
colors.Add("red");
colors.Add("green");
colors.Add("blue");
ViewData["listColors"] = colors;
ViewData["dateNow"]= DateTime.Now;
ViewData["name"] = "hejingyuan";
ViewData["age"]= 25;
return View();
}

View

[html] view plain copy print?
<p>
My name is <b>@ViewData["name"] </b>,<b>@ViewData["age"] </b>years old.
<br />
I like the following colors:
</p>
<ul id="colors">
@foreach (var color in ViewData["listColors"] as List<string>)
{
<li><font color="@color">@color </font></li>
}
</ul>
<p>
@ViewData["dateNow"]
</p>

ViewBag使用:

[csharp] view plain copy print?
public ActionResult Index()
{
List<string>colors = new List<string>();
colors.Add("red");
colors.Add("green");
colors.Add("blue");
ViewBag.ListColors = colors; //colors is List
ViewBag.DateNow= DateTime.Now;
ViewBag.Name= "hejingyuan";
ViewBag.Age = 25;
return View();
}

View

[html] view plain copy print?
<p>
My name is <b>@ViewBag.Name</b>, <b>@ViewBag.Age</b> years old.
<br />
I like the following colors:
</p>
<ul id="colors">
@foreach (var color in ViewBag.ListColors)
{
<li><font color="@color">@color</font> </li>
}
</ul>
<p>
@ViewBag.DateNow
</p>

在使用上,我们可以很明显的看出这两种方式的区别,只是存取值得方式有些区别而已!

二,定义

ViewBag定义

[csharp] view plain copy print?
public dynamic ViewBag {
get {
if (_dynamicViewData == null) {
_dynamicViewData = new DynamicViewDataDictionary(() => ViewData);
}
return _dynamicViewData;
}
}

ViewData定义
[csharp] view plain copy print?
public ViewDataDictionary ViewData {
get {
if (_viewData == null) {
SetViewData(new ViewDataDictionary());
}
return _viewData;
}
set {
SetViewData(value);
}
}

通过定义我们可以看出ViewBag 是ViewData的动态封装器,相当于在ViewData的基础上进行了封装处理。

三:对比

ViewData与ViewBag的区别

1、ViewData是字典类型,赋值方式用字典方式,通过key值读取对应的value,ViewData["myName"]
2、ViewBag是动态类型,使用时直接添加属性赋值即可ViewBag.myName
3、ViewBag和ViewData只在当前Action中有效,等同于View
4、ViewData和ViewBag中的值可以互相访问,因为ViewBag的实现中包含了ViewData

注意:

1,只有当要访问的关键字是一个有效的C#标识符时,ViewBag 才起作用。
例如,如果在ViewData["Key With Spaces"]中存放一个值,那么就不能使用ViewBag访问。因为这样根本就无法通过编译。
2,动态值不能作为一个参数传递给扩展方法。因为C#编译器为了选择正确的扩展方法,在编译时必须知道每一个参数的真正类型。如果其中任何一个参数是动态的,那么就不会通过编译。
例如,这行代码就会编译失败:@Html.TextBox("name",ViewBag.Name)。要使这行代码通过编译有两种方法:第一是使用ViewData["Name"],第二是把ViewBag.Name值转换为一个具体的型:(string)ViewBag.Name 。

四:总结

对于传值方式这个话题,对于大家来说应该是有些老套,因为只要接触过项目的人都很了解,这是一个非常基础的知识,在这里列出来,主要的目的也不是说要告诉大家如何如何传值,如何如何操作,然后要求大家记下来等,而是要通过上面的知识,告诉大家其实知识并没有我们想的那么高深莫测,所有的知识即使我们没有听说过,但只要我们花一些时间去研究,去总结,那么一切困难都变得easy了!
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
如果我满了16岁去犯罪了怎么办? 满16周岁犯罪一般判刑多久 过夜切开的土豆可以吃吗 过夜切开的土豆还能食用吗 重庆什么时候去玩合适 重庆适合几月份去旅游重庆简介 重庆什么季节去最好重庆最佳旅游月份 重庆什么时候去旅游比较好几月份去重庆比较好 重庆几月份去旅游好去重庆旅游的最佳时间 QQ会员聊天记录怎么才能一次性删除完啊 一点一点的删。累啊~~_百度知 ... 我是QQ会员,我的聊天记录都叫老公上传了,怎样才能把我的聊天记录彻底删... 怎么添加不了好友 涡轮叶轮与压气机叶轮如何区分,涡轮与涡轮叶轮如何区分 加不了好友怎么办 如何解决加不了好友 我家巴西龟10月份就不吃东西了,这样能过冬么?我该怎么办 小乌龟过了国庆节还用进食吗 巴西龟十月份还活动要不要喂 我的乌龟从大概十月份开始就不吃东西了 正常吗?是要冬眠了吗? 涡轮叶轮与压气机叶轮如何区分?涡轮与涡轮叶轮如何区分? 叶轮属于机械吗 红米note5手机按下音量调节键后,音量条图标不是应该在上方吗?怎么会从旁边出?怎么调到上方去? 地方领导留言能解决问题吗 臭鳜鱼怎么煮 正宗臭鳜鱼吃法 在地方领导留言板上留言,会不会被下层人员删除? 风机叶轮 吃什么食物最快长肉 什么食物吃了最快长肉 win7系统默认网关不能输入了 左手中指戴戒指(左手中指戴戒指什么意思) 叶轮机械 与透平机械是否一回事 自资管新规正式实施以来,长安信托是怎样适应新业务生态的? 叶轮机械的应用 c# mvc后台赋值ViewData为一个对象,前台怎么捕获 关于在VB中的 call viewdata是什么意思啊??? 请问下,Mvc4怎么处理viewdata传过来的数据呢?@foreach报错 风机的叶轮由什么组成? 迎接春天的优美句子发朋友圈 吃什么东西能让身上长点肉? 客运车乘坐险每座一百万的费率是多少 易语言怎么读取xml配置文件 夏目漱石《我是猫》书评 《我是猫》丨夏目漱石的厌世哲学 夏目漱石《我是猫》:我是一只没有名字的猫 生育险个人可以去报销 kelo.cote涂嘴没事吗 我脸上有很多小时候被抓伤的疤痕,颜色是红的,不过疤痕不深在表面一点点,有点凹进去用kelo-cote芭克硅 kelo-cote 那个去除疤痕的啫喱可以摸脸上用于去除痘印吗?? 一首女生英文歌。啊啦噜啦。啊啦啊啦啊啦噜啦。谁知道这是什么歌 ΗoneУ它的中文翻译 身份证只能绑定一个QQ至尊保帐号吗 QQ飞车手游绑定密保 QQ安全中心没绑定身份证能不能绑定至尊保?