MVC Controller向View传值(ViewData与ViewBag)
近期在开发项目中,使用的是ASP.NET MVC因为之前并没有接触,对于它的传值方式有些陌生,在这里进行初步总结积累学习。
一:使用
ViewData使用:
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
<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使用:
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
<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定义
public dynamic ViewBag {
get {
if (_dynamicViewData == null) {
_dynamicViewData = new DynamicViewDataDictionary(() => ViewData);
}
return _dynamicViewData;
}
}
ViewData定义
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,仅仅有当要訪问的keyword是一个有效的C#标识符时。ViewBag 才起作用。
比如。假设在ViewData["Key With Spaces"]中存放一个值,那么就不能使用ViewBag訪问。由于这样根本就无法通过编译。
2。动态值不能作为一个參数传递给扩展方法。
由于C#编译器为了选择正确的扩展方法,在编译时必须知道每个參数的真正类型。
假设当中不论什么一个參数是动态的,那么就不会通过编译。
比如,这行代码就会编译失败:@Html.TextBox("name",ViewBag.Name)。要使这行代码通过编译有两种方法:第一是使用ViewData["Name"],第二是把ViewBag.Name值转换为一个详细的型:(string)ViewBag.Name 。
四:总结
对于传值方式这个话题。对于大家来说应该是有些老套。由于仅仅要接触过项目的人都非常了解,这是一个非常基础的知识。在这里列出来,基本的目的也不是说要告诉大家怎样怎样传值,怎样怎样操作。然后要求大家记下来等,而是要通过上面的知识,告诉大家事实上知识并没有我们想的那么高深莫測,全部的知识即使我们没有听说过,但仅仅要我们花一些时间去研究,去总结,那么一切困难都变得easy了。
MVC Controller向View传值(ViewData与ViewBag)的更多相关文章
- ASP.NET MVC Controller向View传值方式总结
Controller向View传值方式总结 总结发现ASP.NET MVC中Controller向View传值的方式共有6种,分别是: ViewBag ViewData TempData 向普通Vie ...
- ASP.NET MVC Controller向View传值的几种方式
上几篇博文提到MVC和WebForm的区别,主要是MVC的Controller和View将传统的WebForm的窗体和后台代码做了解耦,这篇博文简单介绍一下在MVC中Controller向View是如 ...
- MVC Controller 与 View 传值
Controller 到 View 1 强类型 控制器 // GET: /Test/ public ActionResult Index() { DateTime date = DateTime.No ...
- MVC:Controller向View传值方式总结
Controller向View传值方式总结 总结发现ASP.NET MVC中Controller向View传值的方式共有6种,分别是: ViewBag ViewData TempData 向普通Vie ...
- 总结Controller向View传值的方式(转)
总结发现ASP.NET MVC中Controller向View传值的方式共有6种,分别是: ViewBag ViewData TempData 向普通View页面传一个Model对象 向强类型页面传传 ...
- Controller向View传值方式总结
http://www.cnblogs.com/guohu/p/4377974.html 总结发现ASP.NET MVC中Controller向View传值的方式共有6种,分别是: ViewBag Vi ...
- 【项目经验】之——Controller向View传值
我们的ITOO进行了一大部分了,整体上来说还是比较顺利的.昨天进行了一次验收,大体上来说,我们新生这块还是可以的.不仅仅进行了学术上的交流,还进行了需求上的更新.也正是由于这一次,我有了解到了一个新的 ...
- Core Mvc传值ViewData、ViewBag和return view(model)
先定义一个Model类Student namespace Lession.Models { public class Student { public string Name { get; set; ...
- MVC教程四:Controller向View传值的几种方式
一.通过ViewData传值 MVC从开始版本就一直支持使用ViewData将Controller里面的数据传递到View.ViewData定义如下: 从上面的截图中可以看出,ViewData里面存的 ...
随机推荐
- frontend http 前端名字定义问题
https://www.winfae.com/admin/api/menu haproxy 日志: Jun 24 13:04:49 localhost haproxy[14817]: 115.236. ...
- Linux下一个简单的日志系统的设计及其C代码实现
1.概述 在大型软件系统中,为了监测软件运行状况及排查软件故障,一般都会要求软件程序在运行的过程中产生日志文件.在日志文件中存放程序流程中的一些重要信息, 包括:变量名称及其值.消息结构定义.函数返回 ...
- Android中使用JNI获得APK签名的哈希值
原地址:http://blog.csdn.net/i5suoi/article/details/19036975 最近在研究android应用中的安全问题,貌似只有将核心代码写到JNI底层才是最安全的 ...
- 破解phpjm.net加密,解密程序,全部公布
原文:破解phpjm.net加密,解密程序,全部公布 2014-05-23更新: 很久没人找我解密了,看来这加密已过时,现公布我这边最新的解密工具. 若有解不出的可联系qq: 267014855 (不 ...
- Oschat IM 开源即时通讯项目介绍 - FengJ的个人页面 - 开源中国社区
Oschat IM 开源即时通讯项目介绍 - FengJ的个人页面 - 开源中国社区 Oschat IM 开源即时通讯项目介绍 255人收藏此文章, 我要收藏 发表于5天前(2013-08-28 ...
- VSTO学习笔记(五)批量编辑Excel 2010 x64
原文:VSTO学习笔记(五)批量编辑Excel 2010 x64 近期因为工作的需要,经常要批量处理大量的Excel文件,如果纯手工一个个修改,非常的麻烦,于是写了这么一个帮助类,希望能对你有所帮助. ...
- 《C/C++专项练习》 — (3)
序 第三次C/C++专项.嗯,要抗住打击,继续加油~ 错题分析与总结 1 . 在64位系统中.有例如以下类: class A { public: void *p1; private: void *p2 ...
- C++--allocator类的使用
C++为我们提供了安全的内存空间申请方式与释放方式,可是new与delete表达式却是把空间的分配回收与对象的构建销毁紧紧的关联在一起.实际上,作为与C语言兼容的语言,C++也为我们提供了更加底层的内 ...
- 一张图总结Google C++编程规范(Google C++ Style Guide)
Google C++ Style Guide是一份不错的C++编码指南,我制作了一张比較全面的说明图,能够在短时间内高速掌握规范的重点内容.只是规范毕竟是人定的,记得活学活用.看图前别忘了阅读以下三条 ...
- PHP监測memcache服务端的执行状况
. 代码例如以下,代码为memcache官方代码,引用在此.做一下简单的说明: 1.设置username和password define('ADMIN_USERNAME','admin'); // A ...