Mvc学习笔记(3)
控制器将处理后的数据“传”给视图的方式
public ActionResult Test()
{
List<Student> stuList = new List<Student>()
{
new Student(){ Age=20, Gender=true, Name="张三1"},
new Student(){ Age=21, Gender=true, Name="张三2"},
new Student(){ Age=22, Gender=true, Name="张三3"},
new Student(){ Age=23, Gender=true, Name="张三4"},
new Student(){ Age=24, Gender=true, Name="张三5"},
}; ViewData["stuName"] = "张三";
ViewBag.stuAge = 22;
TempData["stuGender"] = "男";
return View(stuList);
}
<div>
<!--ViewData-->
@ViewData["stuName"] //张三
<br />
<!--ViewBag-->
@ViewBag.stuName //张三
<br />
<!--ViewBag-->
@ViewBag.stuAge //22
<br />
<!--ViewData-->
@ViewData["stuAge"] //22
<br/>
<!--Model-->
@foreach (var item in Model as List<MVCTest001.Student>)
{
@item.Name<br/> //张三1 张三2 张三3 张三4 张三5
}
<br/>
<!--TempData-->
@TempData["stuGender"] //男
</div> @Html.Action(GetTempData)
1.ViewData、ViewBag、TempData、Model
如上图所示,我们用ViewData设置数据还是获取数据必须使用 ViewData[“stuName”] 说明ViewData是 ViewDataDictionary类型,简而言之ViewData就是一个键值对
我们又从上图的输出结果看到ViewData和ViewBag输出的数据是相等的,那么从这一点我们可以看出ViewData和ViewBag的数据是共享的。那么下面我们通过反编译工具去看看他们是如何共享的
那么我们打开Refletor.exe,搜索Controller(注意:这里你应该给反编译工具添加System.Web.Mvc.dll,系统默认没有),因为Controller类里的代码过多,我就不一一展示,但是我们在Controller类里没有发现ViewData还有ViewBag,那么我们就去父类里ControllerBase找,发现找到了;

我们点开ViewBag可以看到:

我们从this._dynamicViewDataDictionary=new DynamicViewDataDictionary(viewDataThunk);可以看出ViewBag就是从ViewData里面那的的数据,所以ViewBag和ViewData的数据是共享的。
其中:ViewData和ViewBag本质上都是【ViewDataDictionary】类型,并且两者之间的数据是共享,只不过提供了不同的语法操作方式而已。

我们还有一种传输数据的方式就是View(stuList),如上图所示:你的stuList数据会赋值给model,然而ViewData.Model=model,所以ViewData的数据来自于ViewData.Model
TempData也是通过键值对的形式进行传值,但是他的类型TempDataDictionary,他与ViewData和ViewBag不同点是在服务端跨Action传值,例如:
public ActionResult GetTempData()
{
string msg=TempData["stuGender"].ToString();
ViewBag.msg = msg;
return View();
} //视图代码:
<div>
<pre>
@ViewBag.msg
</pre>
</div>
这样我们就可以从Test控制器的 TempData[“stuGender”]获得数据:
下面是一张请求的流程图:

Mvc学习笔记(3)的更多相关文章
- MVC学习笔记索引帖
[MVC学习笔记]1.项目结构搭建及单个类在各个层次中的实现 [MVC学习笔记]2.使用T4模板生成其他类的具体实现 [MVC学习笔记]3.使用Spring.Net应用IOC(依赖倒置) [MVC学习 ...
- ASP.NET MVC学习笔记-----Filter2
ASP.NET MVC学习笔记-----Filter(2) 接上篇ASP.NET MVC学习笔记-----Filter(1) Action Filter Action Filter可以基于任何目的使用 ...
- ASP.NET MVC学习笔记-----Filter
ASP.NET MVC学习笔记-----Filter(1) Filter类型 接口 MVC的默认实现 Description Authorization IAuthorizationFilter Au ...
- Spring MVC 学习笔记一 HelloWorld
Spring MVC 学习笔记一 HelloWorld Spring MVC 的使用可以按照以下步骤进行(使用Eclipse): 加入JAR包 在web.xml中配置DispatcherServlet ...
- .NET MVC 学习笔记(一)— 新建MVC工程
一..NET MVC 学习笔记(一)—— 新建MVC工程 接触MVC有段时间了,一直想找机会整理一下,可是限于文笔太差,所以一直迟迟羞于下手,想到最近做过的MVC项目也有一些了,花点时间整理一下方便以 ...
- Spring MVC 学习笔记12 —— SpringMVC+Hibernate开发(1)依赖包搭建
Spring MVC 学习笔记12 -- SpringMVC+Hibernate开发(1)依赖包搭建 用Hibernate帮助建立SpringMVC与数据库之间的联系,通过配置DAO层,Service ...
- Spring MVC 学习笔记11 —— 后端返回json格式数据
Spring MVC 学习笔记11 -- 后端返回json格式数据 我们常常听说json数据,首先,什么是json数据,总结起来,有以下几点: 1. JSON的全称是"JavaScript ...
- Spring MVC 学习笔记10 —— 实现简单的用户管理(4.3)用户登录显示全局异常信息
</pre>Spring MVC 学习笔记10 -- 实现简单的用户管理(4.3)用户登录--显示全局异常信息<p></p><p></p>& ...
- Spring MVC 学习笔记9 —— 实现简单的用户管理(4)用户登录显示局部异常信息
Spring MVC 学习笔记9 -- 实现简单的用户管理(4.2)用户登录--显示局部异常信息 第二部分:显示局部异常信息,而不是500错误页 1. 写一个方法,把UserException传进来. ...
- Spring MVC 学习笔记8 —— 实现简单的用户管理(4)用户登录
Spring MVC 学习笔记8 -- 实现简单的用户管理(4)用户登录 增删改查,login 1. login.jsp,写在外面,及跟WEB-INF同一级目录,如:ls Webcontent; &g ...
随机推荐
- [HTTP] Origins, CROS, Preflight
Origins made up of three parts the data scheme, the hostname and the prot. It is important to know t ...
- java 四种逻辑运算符
在java的逻辑运算符中,有这么四类&&(短路与).&(与).||(短路或).|(非短路或) &&和&都表示与,&&表示第一个条件为fa ...
- 简单的实现QQ通信功能(二)
第二部分:功能需求以及大体思路 一:功能需求: 1. 角色:登录用户. 2. 登录: (1)检查用户名和密码是否正确,正确登录成功,否则提醒用户名或密码错误. (2)登录时可以选择登录状态,送入数据库 ...
- C# Quartz.Net 定时任务的简单使用
最近做了一个定时执行任务的软件. 执行任务时,会使用log4net记录日志,如果执行任务有异常,则发送邮件给指定的对象. 我做的是每天的9点和16点执行一次任务,以此记录: 首先,获得Quartz.N ...
- 一个月的时间--java从一无所有到能用框架做点东西出来
四月20号到六月2号 因为顺利完成了Struts在线考试系统的学习,基本掌握了struts框架的原理和他众多复杂的标签.趁着下一件事情还没到时间,也顾不上写昨天研习的student部分和今天stude ...
- WildFly 9.0.2 启用 SSL
一.最近做个项目是需要在WildFly中启用https,但是由于WildFly的中文文档比较少所以google了一下,先是通过JBOSS的官方文档了解了一下,但是官方文档这块的配置介绍有些不全面.所以 ...
- ACM/ICPC ZOJ1003-Crashing Balloon 解题代码
#include <iostream> using namespace std; int main() { int **array = new int *[100]; for ( int ...
- C#冒泡排序法程序代码
using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace Console ...
- ReactNative-----环境搭建二(android)
一.初始化一个ReactNative项目 在指定目录运行命令:react-native init Vince(项目名称) //其过程就是在使用CLI工具构建项目, 命令行代码 F:\React> ...
- JAVA学习-JAVA环境准备
dir:列出当前目录下的文件以及文件夹md: 创建目录rd: 删除目录cd: 进入指定的目录,打开文件夹cd..:退回到上一级目录cd/或cd\:退回到根目录del:删除文件d: : 切换到D盘根 ...