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 ...
随机推荐
- php memcache 基础操作
<?php/** * Memcache缓存操作 * @author hxm * @version 1.0 * @since 2015.05.04 */class MCache extends O ...
- QT中报错collect2:ld returned 1 exit status的可能原因。
参考:https://blog.csdn.net/u014546553/article/details/78781547 1.编译成功的例子在后台执行,有时一闪而过,如果再次build ,则会提示上述 ...
- Codeforces Round #486 (Div. 3) F. Rain and Umbrellas
Codeforces Round #486 (Div. 3) F. Rain and Umbrellas 题目连接: http://codeforces.com/group/T0ITBvoeEx/co ...
- cad.net 更改高版本填充交互方式为低版本样子
/// <summary> /// 修改cui,双击填充 /// </summary> /// https://blog.csdn.net/hfmwu/article/deta ...
- react中使用阿里Viser图表
参考demo的codesandbox:https://codesandbox.io/s/kxxxx3w5kv 使用步骤: 1. 安装依赖 viser-react和@antv/data-set 2 ...
- LabVIEW(十四):VI属性
1.VI的属性在项目研究中是很常用的,但是会经常忽略VI的属性设置,建议在编程事常常运用这些属性的设置,这样就可以使你的程序更加完善,易懂性也会提高. 属性快捷键:Ctrl+I. 2.常规 (1).编 ...
- C#6.0语言规范(四) 类型
C#语言的类型分为两大类:值类型和引用类型.值类型和引用类型都可以是泛型类型,它们采用一个或多个类型参数.类型参数可以指定值类型和引用类型. type : value_type | reference ...
- /etc/sysconfig/iptables 默认配置详解
[参考链接]:一把三尺剑的百度知道回答 1. iptables文件 2. 规则语句详解 :INPUT ACCEPT [0:0] # 该规则表示INPUT表默认策略是ACCEPT :FORWARD AC ...
- centos6.2升级到centos6.8(6.5应该也一样)
1.根据这篇文章https://wenku.baidu.com/view/55bf7f8db8f67c1cfad6b8bf.html修改CentOS-Base.repo文件(主要是修改baseurl为 ...
- 嵌入式小系统I2S接口调试总结
最近调试了I2S.由于芯片里面硬件配置出现了几个错误,着实也把我折腾了一番,不过,最终 还是把它搞定了.为了加深理解,就做个笔记吧,方面以后查找和学习. 定义:I²S或I2S(英语:Inter-IC ...