ASP.NET MVC4中ViewBag、ViewData和TempData的使用和区别
一、说明
本文章主要是讲解asp.net mvc中ViewBag、ViewData和TempData的使用和区别,ViewBag、ViewData和TempData常常用于将action方法中的数据传递到view界面。 从MVC3开始,视图数据可以通过ViewBag属性访问,在MVC2中则是使用ViewData。MVC3中保留了ViewData的使用。ViewBag 是动态类型(dynamic),ViewData 是一个字典型的(Dictionary)。
二、区别
ViewBag 不再是字典的键值对结构,而是 dynamic 动态类型,它会在程序运行的时候动态解析。只是ViewData为object型,而ViewBag为dynamic型。而dynamic型与object型的区别则是在使用时它会自动根据数据类型转换,而object型则需要我们自己去强制转换。
同ViewData和ViewBag一样,TempData也可以用来向视图传递数据。只是ViewData和ViewBag的生命周期和View相同,只对当前View有用,且不能在不同的action之间进行传值。而TempData则可以在不同的Action中进行传值,类似webform里的Seesion
三、使用示例
1、ViewBag的使用
控制器代码
public class HomeController : Controller
{
//
// GET: /Home/
public ActionResult Index()
{
string[] myArray = {"one","two","three" };
ViewBag.myItem = myArray;
return View();
}
}
view视图代码如下:
@{
ViewBag.Title = "Index";
} <h2>Index</h2>
<h1>以下是ViewBag的用法</h1>
<ul>
@foreach (var item in ViewBag.myItem)
{
<li>@item</li>
}
</ul>
运行效果
2、ViewData
控制器代码
public class HomeController : Controller
{
//
// GET: /Home/
public ActionResult Index()
{
string[] myArray = {"one","two","three" };
ViewData["myItem"] = myArray;
return View();
} }
Index.cshtml代码如下:
<h1>以下是viewdata的用法</h1>
<ul>
@foreach(var item in (string[])ViewData["myItem"])
{
<li>@item</li>
}
</ul>
注意:应用ViewData["myItem"]时,要记得类型转换比如 :(string[])
运行效果:
3、TempData在action传数据到view的应用
控制器代码
public class HomeController : Controller
{
//
// GET: /Home/ public ActionResult Index()
{
string[] myArray = {"one","two","three" };
TempData["myItem"] = myArray;
return View();
} }
Index.cshtml页面代码如下:
<h1>以下是TempData的用法</h1>
<ul>
@foreach(var item in (string[])TempData["myItem"])
{
<li>item is :@item</li>
}
</ul>
注意:应用TempData["myItem"]时,要记得类型转换比如 :(string[])
运行效果:
4、TempData在action间传递数据的应用
控制器代码:
在控制器代码中,在action Index中定义的数据, TempData["myItem"] = myArray;被传递到action Search方法中
public ActionResult Index()
{
string[] myArray = {"one","two","three" };
TempData["myItem"] = myArray;
return View();
}
public ActionResult Search() {
return View(TempData["myItem"]);
}
Search.cshtml页面的代码
<h2>Search</h2>
<ul>
@foreach(var item in (string[])TempData["myItem"])
{
<li>item is :@item</li>
}
</ul>
运行效果:
需要注意的是:TempData["myItem"]中的数据,只能被提取、引用一次,再次刷新界面,都会报错,因为TempData["myItem"]中的数据已经被删除。
ASP.NET MVC4中ViewBag、ViewData和TempData的使用和区别的更多相关文章
- mvc4中viewbag viewdata 和 tempdata的区别
ViewBag 不再是字典的键值对结构,而是 dynamic 动态类型,它会在程序运行的时候动态解析. eg: ViewBag.NumberObjs = new string[] { "on ...
- Asp.net MVC中的ViewData与ViewBag
Asp.net MVC中的ViewData与ViewBag 在Asp.net MVC 3 web应用程序中,我们会用到ViewData与ViewBag,对比一下: ViewData ViewBag 它 ...
- MVC3中 ViewBag、ViewData和TempData的使用和区别(转发:汴蓝)
MVC3中 ViewBag.ViewData和TempData的使用和区别 在MVC3开始,视图数据可以通过ViewBag属性访问,在MVC2中则是使用ViewData.MVC3中保留了ViewD ...
- WebSocket在ASP.NET MVC4中的简单实现
WebSocket在ASP.NET MVC4中的简单实现 2013-12-21 20:48 by 小白哥哥, 810 阅读, 3 评论, 收藏, 编辑 WebSocket 规范的目标是在浏览器中实现和 ...
- 在ASP.NET MVC4中实现同页面增删改查,无弹出框02,增删改查界面设计
在上一篇"在ASP.NET MVC4中实现同页面增删改查,无弹出框01,Repository的搭建"中,已经搭建好了Repository层,本篇就剩下增删改查的界面了......今 ...
- ASP.NET MVC4中的bundles特性引发服务器拒绝访问(403错误)
在ASP.NET MVC4中微软引入了bundles特性,这个特性可以将服务器端的多个Javascript或多个css文件捆绑在一起作为一个单一的URL地址供客户端浏览器调用,从而减少了页面上Http ...
- ASP.NET MVC4中使用NHibernate
ASP.NET MVC4中使用NHibernate 1:下载安装NHibernate 打开 VS 2012新建一个 MVC4项目. 在项目名称上右击选择Manage NuGet Packages.你会 ...
- C#面试题(转载) SQL Server 数据库基础笔记分享(下) SQL Server 数据库基础笔记分享(上) Asp.Net MVC4中的全局过滤器 C#语法——泛型的多种应用
C#面试题(转载) 原文地址:100道C#面试题(.net开发人员必备) https://blog.csdn.net/u013519551/article/details/51220841 1. . ...
- ASP.NET MVC4中的App_start中BundleConfig的介绍使用
在BundleConfig.cs中,指定CSS和JS,主要用来压缩JS和CSS 在ASP.NET MVC4中(在WebForm中应该也有),有一个叫做Bundle的东西,它用来将js和css进行压 ...
随机推荐
- 学习在requirejs下如何使用underscore.js模板
近期在学习underscore.js 这个小而美的js库,是前端 MVC 框架backbone依赖库,他的模板方法主要应用场景是ajax交互过程到页面需要大量的字符串拼接,这部分如果一旦不够仔细就很容 ...
- es6总结(十二)--generator
- 07深入理解C指针之---指针类型和长度
该系列文章源于<深入理解C指针>的阅读与理解,由于本人的见识和知识的欠缺可能有误,还望大家批评指教. 如果考虑到程序的可移植性和跨平台性时,指针长度就是一个问题,需要慎重处理.一般情况下, ...
- java打包python到exe文件
最近想把写的python代码打包,以供没用安装python环境的同事使用,需求如下: 无python环境也可执行 文件尽量少,不要太乱 程序体积尽量小 如果需要更新的话重复类库不用更新 采用方案如下: ...
- 如何循序渐进向.NET架构师发展
微软的DotNet开发绝对是属于那种入门容易提高难的技术.而要能够成为DotNet架构师没有三年或更长时间的编码积累基本上是不可能的.特别是在大型软件项目中,架构师是项目核心成员,承上启下,因此RUP ...
- 洛谷——P1238 走迷宫
P1238 走迷宫 题目描述 有一个m*n格的迷宫(表示有m行.n列),其中有可走的也有不可走的,如果用1表示可以走,0表示不可以走,文件读入这m*n个数据和起始点.结束点(起始点和结束点都是用两个数 ...
- python中执行shell命令的几个方法
1.os.system() a=os.system("df -hT | awk 'NR==3{print $(NF-1)}'") 该命令会在页面上打印输出结果,但变量不会保留结果, ...
- Extjs grid 单元格编辑
实现grid勾选后出现编辑按钮,通过增加一个字段checked来控制 事件如下: selectionchange: function (thi, selected, eOpts) { for (var ...
- Java-多态的理解(主要是解释一个网上经典的例子)
如题,本文重点不在于介绍什么是多态,所以一些基础的概念就不多说了(需要知道的时候会提一下).要了解多态的话这里推荐一篇 http://www.cnblogs.com/jack204/archive/2 ...
- Docker实战(一):基础命令
# 在ubuntu中安装docker $ sudo apt-get install docker.io # 查看docker的版本信息 $ docker version # 查看安装docker的信息 ...