在MVC3开始,视图数据可以通过ViewBag属性访问,在MVC2中则是使用ViewData。MVC3中保留了ViewData的使用。ViewBag是动态类型(dynamic),ViewData是一个字典型的(Dictionary)。viewData比viewBag要快,且在viewPage中查询数据是需要转换数据类型,而viewBag不需要数据转换。TempData也可以用来向视图传递数据。只是ViewData和ViewBag的生命周期和View相同,只对当前View有用。而TempData则可以在不同的Action中进行传值,类似webform里的Seesion。

1、viewData。

在Controller中使用ViewData:

  1. <span style="white-space:pre">    </span>    ViewData["Title"] = " Using ViewData";
  2. List<string> modules = new List<string>();
  3. modules.Add("Admin module");
  4. modules.Add("ShoppingCart module");
  5. modules.Add("CMS module");
  6. ViewData["modules"] = modules;
  7. return View();

对应UsingViewData View的cshtml:

  1. <h1>@ViewData["Title"]</h1>
  2. <div>
  3. Project Details:<br />
  4. <div>
  5. module List  :
  6. <ul id="modulelist">
  7. @foreach ( var module in ViewData["modules"] as List<string> )
  8. {
  9. <li>
  10. @module
  11. </li>
  12. }
  13. </ul>
  14. </div>
  15. </div>

大家注意到,这里需要类型转换——as List<string>.

2、viewBag。

在Controller中使用viewBag:

  1. <span style="white-space:pre">    </span>    ViewBag.Title = " Using ViewBag";
  2. List<string> modules = new List<string>();
  3. modules.Add("Admin module");
  4. modules.Add("ShoppingCart module");
  5. modules.Add("CMS module");
  6. ViewBag.modules = modules;
  7. return View();

对应View UsingViewBag 的cshtml的ViewBag:

  1. <h1>@ViewBag.Title</h1>
  2. <div>
  3. Project Details:<br />
  4. <div>
  5. module List  :
  6. <ul id="modulelist">
  7. @foreach ( var module in ViewBag.modules )
  8. {
  9. <li>
  10. @module
  11. </li>
  12. }
  13. </ul>
  14. </div>
  15. </div>

3、TempData。

在Controller中使用TempData:

  1. <span style="white-space:pre">    </span>TempData["abc"] = "this is tempdata";
  2. return View();

对于视图里使用TempData:

  1. @TempData["abc"]

这里你会发现,TempData的值在取了一次后则会自动删除,这时我再刷新页面,则TempData["abc"]为Null了。

总结:ViewBag其实本质就是ViewData,只是多了层Dynamic控制,不过ViewData需要进行类型转换。TempData和ViewBag、ViewData的区别是生命周期不同,ViewData、ViewBag的生命周期和view同,TempData则可以在不同的Action中进行传值,但他调用一次的值就会被删除。

ASP.NET MVC中viewData、viewBag和templateData的区别的更多相关文章

  1. 几句话说明 .NET MVC中ViewData, ViewBag和TempData的区别

    ViewData和TempData是字典类型,赋值方式用字典方式, ViewData["myName"] ViewBag是动态类型,使用时直接添加属性赋值即可 ViewBag.my ...

  2. asp.net mvc中ViewData、ViewBag和TempData的详解

    一.ViewData和ViewBag 1.ViewData和ViewBag都是从Action向View传递数据的方式,当然还有其他方式如向View传递Model. 2.ViewData页面查询数据时需 ...

  3. ASP.NET MVC中viewData、viewBag和templateData的使用与区别

    一:类型比较 1.1)ViewBag是动态类型(dynamic). 1.2)ViewData是一个字典型的(Dictionary)-->ViewDataDictionary. 1.3)TempD ...

  4. ASP.NET MVC中ViewData、ViewBag和TempData

    1.ViewData 1.1 ViewData继承了IDictionary<string, object>,因此在设置ViewData属性时,传入key必须要字符串型别,value可以是任 ...

  5. Asp.net MVC中Html.Partial, RenderPartial, Action,RenderAction 区别和用法【转发】

    Html.partial和RenderPartial的用法与区别Html.partial和RenderPartial都是输出html片段,区别在于Partial是将视图内容直接生成一个字符串并返回(相 ...

  6. Asp.net MVC中Html.Partial, RenderPartial, Action,RenderAction 区别和用法(mvc部分视图的添加)

    Partial 和RenderPartial:这两个的性质都是一样, 只指把一个个View给镶入进来, 只是回传值有点不一样Partial 回传的一个Object (MvcHtmlString), 回 ...

  7. Asp.net MVC中Html.Partial, RenderPartial, Action,RenderAction 区别和用法

    Partial 和RenderPartial:这两个的性质都是一样, 只指把一个个View给镶入进来, 只是回传值有点不一样Partial 回传的一个Object (MvcHtmlString), 回 ...

  8. [转]Asp.net MVC中Html.Partial, RenderPartial, Action,RenderAction 区别和用法

    本文转自:http://www.cnblogs.com/gesenkof99/archive/2013/06/03/3115052.html Partial 和RenderPartial:这两个的性质 ...

  9. Asp.net MVC中的ViewData与ViewBag

    Asp.net MVC中的ViewData与ViewBag 在Asp.net MVC 3 web应用程序中,我们会用到ViewData与ViewBag,对比一下: ViewData ViewBag 它 ...

随机推荐

  1. Java中Properties类知识的总结

    一.Properties类与配置文件 注意:是一个Map集合,该集合中的键值对都是字符串.该集合通常用于对键值对形式的配置文件进行操作. 配置文件:将软件中可变的部分数据可以定义到一个文件中,方便以后 ...

  2. es6 ajax

    简单的co用例: var co=require("co") class view{ constructor(){ co(function*(){ var p1=this.ajax1 ...

  3. 浅谈Json和jsonp

    定义: JSON:是一种数据交换格式, JSONP是一种依靠开发人员的聪明才智创造出的一种非官方跨域数据交互协议 曾经看到一个有意思的例子:JSON是地下党们用来书写和交换情报的“暗号”的话, 而JS ...

  4. 各种同步方法性能比较(synchronized,ReentrantLock,Atomic)

    synchronized: 在资源竞争不是很激烈的情况下,偶尔会有同步的情形下,synchronized是很合适的.原因在于,编译程序通常会尽可能的进行优化synchronize,另外可读性非常好,不 ...

  5. ceph network introduce

    网络结构 Ceph 使用以太网连接内部各存储节点以及连接 client 和集群.Ceph 推荐使用两个网络: 前端(北向)网络( a public (front-side) network):连接客户 ...

  6. Ubuntu server12.04安装JDK+Tomcat+mysql

    一.安装JDK 1.首先到官网上下载jdk-7u79-linux-x64.tar.gz. 2.将jdk-7u79-linux-x64.tar.gz拷贝到/usr/lib/jdk/目录下面,这里如果没有 ...

  7. iOS控件之UIResponder类

    iOS控件之UIResponder类 在iOS中UIResponder类是专门用来响应用户的操作处理各种事件的,我们知道UIApplication.UIView.UIViewController这几个 ...

  8. Spring操作指南-IoC基础环境配置(基于XML)

  9. 区间重叠计算及IntervalTree初识

    最近被人问到这样一个问题的解决方案:在一个餐馆的预定系统中,接受用户在未来任意一段时间内的预订用餐,用户在预订的时候需要提供用餐的开始时间和结束,餐馆的餐桌是用限的,问题是,系统要在最快的时间段计算出 ...

  10. python web前端

    概述 HTML是英文Hyper Text Mark-up Language(超文本标记语言)的缩写,他是一种制作万维网页面标准语言(标记).相当于定义统一的一套规则,大家都来遵守他,这样就可以让浏览器 ...