MVC基础篇—控制器与视图数据的传递
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基础篇—控制器与视图数据的传递的更多相关文章
- iOS系列 基础篇 04 探究视图生命周期
iOS系列 基础篇 04 探究视图生命周期 视图是应用的一个重要的组成部份,功能的实现与其息息相关,而视图控制器控制着视图,其重要性在整个应用中不言而喻. 以视图的四种状态为基础,我们来系统了解一下视 ...
- C#-MVC基础-模型(Model)、视图(View)和控制器(Controller)
搜狗百科:http://baike.sogou.com/v25227.htm?fromTitle=MVC MVC全名是Model View Controller,是软件工程中的一种软件架构模式,把软件 ...
- MVC中从控制器到视图的数据传递方法汇总
1.ViewData对象概述ViewData是一种字典集合数据,是"视图基类"和"控制器基类"的属性常见用法是在控制器中写入数据,在视图中读取数据ViewDat ...
- MVC中Model,不仅仅只是数据的传递者
在Model使用的时候很多人回向以前写三层架构一样使用它,将Model作为数据的传递者. 比如常见的写法 public int Id { get; set; } public int RoleId { ...
- ASP.Net 第一天笔记 MVC 控制器与视图数据传递注意事项
1.如果方法的参数的名称与表单元素Name属性的值一致的话,会自动填充 2.如果表单元素的Name属性与实体类型中属性一致,那么表单中的数据会自动赋值给实体中的属性 3.控制器中重载的方法 方法前上边 ...
- (spring-第21回【MVC基础篇】)SpringMVC一点就通
概述 Spring MVC通过一套MVC注解,让POJO变成处理请求的控制器,无需实现任何接口,同时,SpringMVC还支持REST风格的URL请求:注解驱动和REST风格的Spring MVC是S ...
- cocos2dx基础篇(15) 列表视图CCTableView
[3.x] (1)去掉 "CC" (2)TableViewCell 中: > unsigned int getIdx() 返回类型改为 ssize_t(类型为 long) ( ...
- easyui框架--基础篇(一)-->数据表格datagrid(php与mysql交互)
前 言 php easyui框架--本篇学习主要是 easyui中的datagrid(数据表格)框架. 本篇学习主要通过讲解一段代码加GIF图片学习datagrid(数据表格)中的一些常用属 ...
- Spring MVC 基础篇4
Spring MVC Controller中返回数据到页面 1.使用ModelAndView 进行数据返回到请求页面 2.利用Map类型的入参进行Controller返回到页面上 3.将数据放到Ses ...
随机推荐
- centos7安装keepalived问题
● keepalived.service - LVS and VRRP High Availability Monitor Loaded: loaded (/usr/lib/systemd/syste ...
- Struts2学习第四天——拦截器及文件上传
1.概述 Struts2的很多核心功能都是由拦截器完成的. 拦截器很好的实现了AOP的编程思想,在动作的执行之前和结果的返回之后,做拦截处理. 2.struts2的默认拦截器栈 3.自定义拦截器 St ...
- 整理python小爬虫
编码使我快乐!!! 我也不知道为什么,遇到自己喜欢的事情,就越想做下去,可以一个月不出门,但是不能一天没有电脑 掌握程度:对python有了一个更清晰的认识,自动化运维,也许可以用python实现呢, ...
- 自动化部署shell
yum install curl policycoreutils openssh-server openssh-clients postfix [root@linux-node2 ~]# yum in ...
- Beta冲刺 (5/7)
Part.1 开篇 队名:彳艮彳亍团队 组长博客:戳我进入 作业博客:班级博客本次作业的链接 Part.2 成员汇报 组员1(组长)柯奇豪 过去两天完成了哪些任务 共享编辑文章的后端数据处理 部分代码 ...
- ESP-IDF版本2.1.1
版本2.1.1是一个错误修复版本.它包括对KRACK和BlueBorne漏洞的修复. 版本2.1.1的文档可在http://esp-idf.readthedocs.io/en/v2.1.1/上找到. ...
- PMP:7.项目成本管理
内容中包含 base64string 图片造成字符过多,拒绝显示
- ASP.NET Core 请求/查询/响应参数格式转换(下划线命名)
业务场景: 在 ASP.NET Core 项目中,所有的代码都是骆驼命名,比如userName, UserName,但对于 WebApi 项目来说,因为业务需要,一些请求.查询和响应参数的格式需要转换 ...
- java之vector详细介绍
1 vector介绍 Vector简介 Vector 是矢量队列,它是JDK1.0版本添加的类.继承于AbstractList,实现了List, RandomAccess, Cloneable这些接口 ...
- PHP错误处理函数register_shutdown_function
当程序在线上运行时,如果遇到BUG,想不在前端输出错误信息,同时能及时邮件通知开发者,register_shutdown_function函数就可以派上用场了. 注册一个会在脚本执行完成或者 exit ...