Viewdata,Viewbag,Tempdata

1  Vewdata:简单来说就是数据字典,通过键值对的形式来存放数据。举例如下:

//后台控制器代码:

 public ActionResult ViewdataPractise()
{
ViewData["name"] = "Hello,Viewdata";
return View();
}

前台页面代码:

 @{
Layout = null;
} <!DOCTYPE html> <html>
<head>
<meta name="viewport" content="width=device-width" />
<title>ViewdataPractise</title>
</head>
<body>
<div>
@ViewData["name"]
</div>
</body>
</html>

结果:Hello,Viewdata


2 Viewbag:简单来说,是动态视图数据字典,是dynamic类型的对象,也可以用来将后台控制器的数据传递到前台View中去。

//后台控制器代码:

 public class HomeController : Controller
{
public ActionResult Index()
{
ViewBag.Name = "Hello,Viewbag";
return View();
}
}

前台页面代码:

 @{
Layout = null;
} <!DOCTYPE html> <html>
<head>
<meta name="viewport" content="width=device-width" />
<title>ViewbagPractice</title>
</head>
<body>
<div>
@ViewBag.Name
</div>
</body>
</html>

结果:Hello,Viewbag

看到这里读者应该会有疑惑,不是一样吗?,两者的区别是什么?接下来,简单介绍下两者的联系与区别:

分别给viewdata和viewbag赋值一个字符串数组如下:

Viewdata:

 public ActionResult Index()
{
string[] data = new string[] {"阳光普照","万物生长" };
ViewData["key"] = data;
return View();
}
 @{
Layout = null;
} <!DOCTYPE html> <html>
<head>
<meta name="viewport" content="width=device-width" />
<title>ViewbagPractice</title>
</head>
<body>
<div>
<table>
@foreach (var data in (string[])ViewData["key"])
{
<tr><td>@data</td></tr>
}
</table>
</div>
</body>
</html>

结果:阳光普惠

万物生长

可以发现在View中,遍历Viewdata中的时候,需要对数组类型强转为字符串类型,不转的话会报错。然而如果是遍历Viewbag的话,就不需要强转,因为viewbag是dynamic类型,会自动转换的。

结论:Viewdata是数据字典的键值对结合,在View中可能需要强转,Viewbag是dynamic类型的对象,在view中不需要强转,因为其内部会自动转换。通过反编译器发现,Viewbag本质就是Viewdata,只是多了层dynamic控制。所以使用哪个看个人爱好,这是我自己的见解。

  3 Tempdata(扩展):存放临时数据,用于在不同Action之间传递数据,但是在获取过一次数据后,刷新页面,该数据为null。

 public ActionResult Index()
{
TempData["key"] = "临时数据";
ViewData["key1"] = "Viewdata数据";
return View();
}
public ActionResult GetTempData()
{
return View();
}

GetTempdata页面:

 @{
Layout = null;
} <!DOCTYPE html> <html>
<head>
<meta name="viewport" content="width=device-width" />
<title>GetTempData</title>
</head>
<body>
<div>
@TempData["key"]
</div><br />
<span>@ViewData["key1"]</span>
</body>
</html>

结果:临时数据。如果将GetTempdata页面刷新,临时数据消失,结果为空

结论:viewdata和viewbag数据只能在本视图页面上传递数据,但是tempdata可以在不同的视图传递数据,但是当获取过一次tempdata数据后,该数据会消失,然而viewdata和viewbag中的数据不会消失。还有就是tempdata数据是存储在session中的。如果禁用sessionstate,那么就会报异常。

以上就是自己对Viewdata,Viewbag,Tempdata的见解,有什么不对的地方,还请指教,谢谢。

MVC基础篇—控制器与视图数据的传递的更多相关文章

  1. iOS系列 基础篇 04 探究视图生命周期

    iOS系列 基础篇 04 探究视图生命周期 视图是应用的一个重要的组成部份,功能的实现与其息息相关,而视图控制器控制着视图,其重要性在整个应用中不言而喻. 以视图的四种状态为基础,我们来系统了解一下视 ...

  2. C#-MVC基础-模型(Model)、视图(View)和控制器(Controller)

    搜狗百科:http://baike.sogou.com/v25227.htm?fromTitle=MVC MVC全名是Model View Controller,是软件工程中的一种软件架构模式,把软件 ...

  3. MVC中从控制器到视图的数据传递方法汇总

    1.ViewData对象概述ViewData是一种字典集合数据,是"视图基类"和"控制器基类"的属性常见用法是在控制器中写入数据,在视图中读取数据ViewDat ...

  4. MVC中Model,不仅仅只是数据的传递者

    在Model使用的时候很多人回向以前写三层架构一样使用它,将Model作为数据的传递者. 比如常见的写法 public int Id { get; set; } public int RoleId { ...

  5. ASP.Net 第一天笔记 MVC 控制器与视图数据传递注意事项

    1.如果方法的参数的名称与表单元素Name属性的值一致的话,会自动填充 2.如果表单元素的Name属性与实体类型中属性一致,那么表单中的数据会自动赋值给实体中的属性 3.控制器中重载的方法 方法前上边 ...

  6. (spring-第21回【MVC基础篇】)SpringMVC一点就通

    概述 Spring MVC通过一套MVC注解,让POJO变成处理请求的控制器,无需实现任何接口,同时,SpringMVC还支持REST风格的URL请求:注解驱动和REST风格的Spring MVC是S ...

  7. cocos2dx基础篇(15) 列表视图CCTableView

    [3.x] (1)去掉 "CC" (2)TableViewCell 中: > unsigned int getIdx() 返回类型改为 ssize_t(类型为 long) ( ...

  8. easyui框架--基础篇(一)-->数据表格datagrid(php与mysql交互)

      前  言  php  easyui框架--本篇学习主要是 easyui中的datagrid(数据表格)框架. 本篇学习主要通过讲解一段代码加GIF图片学习datagrid(数据表格)中的一些常用属 ...

  9. Spring MVC 基础篇4

    Spring MVC Controller中返回数据到页面 1.使用ModelAndView 进行数据返回到请求页面 2.利用Map类型的入参进行Controller返回到页面上 3.将数据放到Ses ...

随机推荐

  1. python 更换 版本

    这是一个悲伤的安装ipython的过程. 写下来留个教训吧. 也是希望对博友一些帮助吧. 注: 我也写了一篇window下安装bpython的文章(个人感觉bpython要比ipython强大的多), ...

  2. Java面试题4

    一.JAVA基础篇-概念1.简述你所知道的Linux: Linux起源于1991年,1995年流行起来的免费操作系统,目前, Linux是主流的服务器操作系统, 广泛应用于互联网.云计算.智能手机(A ...

  3. Unity3D之物理射线

    射线:从一个点往一个方向,发射一根无限长的射线,这根射线会与场景中带有 Collider 组件的物体发生碰撞. 射线的使用: public class Test { private void Star ...

  4. Html5与Css3知识点拾遗(七)

    布局 实例:规范的命名和编排 <body> <div class="page"><!--page开始--> <header class=& ...

  5. python3字符串操作

    python3字符串操作 x = 'abc' y = 'defgh' print(x + y) #x+y print(x * ) #x*n print(x[]) #x[i] print(y[:-]) ...

  6. Vuejs——(9)组件——props数据传递

    版权声明:出处http://blog.csdn.net/qq20004604   目录(?)[+]   本篇资料来于官方文档: http://cn.vuejs.org/guide/components ...

  7. Spring之AOP由浅入深

    1.AOP的作用 在OOP中,正是这种分散在各处且与对象核心功能无关的代码(横切代码)的存在,使得模块复用难度增加.AOP则将封装好的对象剖开,找出其中对多个对象产生影响的公共行为,并将其封装为一个可 ...

  8. GET请求Referer限制绕过总结

    作者:Vulkey_Chen 原文来自:GET请求Referer限制绕过总结 前言 在做测试的时候会遇见这样几个漏洞场景: JSONP跨域劫持 反射XSS GET请求类型攻击 但是,在相对安全的情况下 ...

  9. 教你用python打造WiFiddos

    本文来源于i春秋学院,未经允许严禁转载. 0x00 前言因为在百度上很难找到有关于用python打造WiFidos的工具的,而且不希望大家成为一名脚本小子,所以我打算写一篇,需要的工具有scapy,i ...

  10. [git] 本地仓库信息的查询

    本地仓库信息查询操作 1.1  git status 查看当前暂存区状态 git  status 显示当前分支信息: 提交的目的分支信息: git 管理的有修改的文件: 当前仓库未被 git 管理的文 ...