控制器将处理后的数据“传”给视图的方式

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)的更多相关文章

  1. MVC学习笔记索引帖

    [MVC学习笔记]1.项目结构搭建及单个类在各个层次中的实现 [MVC学习笔记]2.使用T4模板生成其他类的具体实现 [MVC学习笔记]3.使用Spring.Net应用IOC(依赖倒置) [MVC学习 ...

  2. ASP.NET MVC学习笔记-----Filter2

    ASP.NET MVC学习笔记-----Filter(2) 接上篇ASP.NET MVC学习笔记-----Filter(1) Action Filter Action Filter可以基于任何目的使用 ...

  3. ASP.NET MVC学习笔记-----Filter

    ASP.NET MVC学习笔记-----Filter(1) Filter类型 接口 MVC的默认实现 Description Authorization IAuthorizationFilter Au ...

  4. Spring MVC 学习笔记一 HelloWorld

    Spring MVC 学习笔记一 HelloWorld Spring MVC 的使用可以按照以下步骤进行(使用Eclipse): 加入JAR包 在web.xml中配置DispatcherServlet ...

  5. .NET MVC 学习笔记(一)— 新建MVC工程

    一..NET MVC 学习笔记(一)—— 新建MVC工程 接触MVC有段时间了,一直想找机会整理一下,可是限于文笔太差,所以一直迟迟羞于下手,想到最近做过的MVC项目也有一些了,花点时间整理一下方便以 ...

  6. Spring MVC 学习笔记12 —— SpringMVC+Hibernate开发(1)依赖包搭建

    Spring MVC 学习笔记12 -- SpringMVC+Hibernate开发(1)依赖包搭建 用Hibernate帮助建立SpringMVC与数据库之间的联系,通过配置DAO层,Service ...

  7. Spring MVC 学习笔记11 —— 后端返回json格式数据

    Spring MVC 学习笔记11 -- 后端返回json格式数据 我们常常听说json数据,首先,什么是json数据,总结起来,有以下几点: 1. JSON的全称是"JavaScript ...

  8. Spring MVC 学习笔记10 —— 实现简单的用户管理(4.3)用户登录显示全局异常信息

    </pre>Spring MVC 学习笔记10 -- 实现简单的用户管理(4.3)用户登录--显示全局异常信息<p></p><p></p>& ...

  9. Spring MVC 学习笔记9 —— 实现简单的用户管理(4)用户登录显示局部异常信息

    Spring MVC 学习笔记9 -- 实现简单的用户管理(4.2)用户登录--显示局部异常信息 第二部分:显示局部异常信息,而不是500错误页 1. 写一个方法,把UserException传进来. ...

  10. Spring MVC 学习笔记8 —— 实现简单的用户管理(4)用户登录

    Spring MVC 学习笔记8 -- 实现简单的用户管理(4)用户登录 增删改查,login 1. login.jsp,写在外面,及跟WEB-INF同一级目录,如:ls Webcontent; &g ...

随机推荐

  1. 征服 Nginx + Tomcat【转】

    征服 Nginx + Tomcat Server Architecture/Distributed nginxtomcatsessioncluster  2年前一直折腾Apache,现如今更习惯Ngi ...

  2. count(1) count(*)

    mysql from t; +---+ | +---+ | | | | +---+ rows in set (0.00 sec) mysql) from t; +----------+ ) | +-- ...

  3. C# - 集合类 - 集合接口

    本篇将介绍关于集合的接口 这些接口定义了所有与集合有关的类的框架 IEnumerable接口 ns:System.Collections 此接口定义了对集合遍历的方法 一般表示元素序列或集合的类都实现 ...

  4. 实现当UILable的内容超出其范围后自动滚动效果

    本文主要介绍 [当UILabel的内容超出其自身的宽度范围后,进行互动展示的效果],我们先来看一下Demo的效果图. 实际实现起来并不十分繁杂,在这里,为了开发的效率,我们使用了一个已经封装好的UIL ...

  5. 提升资源利用率的MapReduce框架

    Hadoop系统提供了MapReduce计算框架的开源实现,像Yahoo!.Facebook.淘宝.中移动.百度.腾讯等公司都在借助 Hadoop进行海量数据处理.Hadoop系统性能不仅取决于任务调 ...

  6. UPDATE---修改表中数据

    UPDATE table_name SET column1=value1,column2=value2,... [WHERE conditions]; 例: UPDATE userinfo SET n ...

  7. Java项目依赖的配置过程

    我们经常需要把大项目分解成多个小项目,然后使用依赖方式,将其他必须的依赖项目引用到项目中.最常用的方式是希望被依赖的项目能够自动被打包成jar文件,自动部署到依赖的项目中.同时被依赖项目修改后,能够同 ...

  8. nyoj 2 括号配对问题

    括号配对问题 时间限制:3000 ms  |            内存限制:65535 KB 难度:3   描述 现在,有一行括号序列,请你检查这行括号是否配对.   输入 第一行输入一个数N(0& ...

  9. 如何在eclipse使用StaggeredGridView

    概述  现在的开发工具基本都用AndroidStudio了.网上的开源框架也是.比如做瀑布式UI的StaggeredGridView,还有导航页的PagerSlidingTabStrip等. 那么电脑 ...

  10. 20160331javaweb之JSP include 指令&&九大隐式对象

    3.零散知识 (1)jsp映射 <servlet> <servlet-name>index</servlet-name> <jsp-file>/inde ...