在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. springboot+redis

    上篇整合了DB层,现在开始整合缓存层,使用redis. springboot驱动注解,使用spring注入JedisPool便可封装自己的redis工具类. package hello.configu ...

  2. CocoaPods for Xcode

    http://www.cnblogs.com/MrRed/p/5728933.html 非常方便的Xcode pods插件.可以很方便的在Xcode通过pods安装各种objective-c第三方库, ...

  3. css 居中问题

    水平居中有text-align:center 和 margin:0 auto,前者是针对父元素进行设置而后者则是对子元素.margin:0 auto; 这里实现的前提是子元素没有float 浮动起来, ...

  4. 《Linux及安全》实践3.1

    <Linux及安全>实践三 ELF格式文件分析 一.基础操作 1.查看大小端.32还是64 由此可以看出,本人实践所用到的是32位Ubuntu,数据存储采用小端法. 2.编写hello.c ...

  5. 给div加上背景图片

    <div class="panel-body" style="background:url('pages/upload/brief/img/bg.jpg');bac ...

  6. JAVASE02-Unit06: 文件操作——File 、 文件操作—— RandomAccessFile

    Unit06: 文件操作--File . 文件操作-- RandomAccessFile java.io.FileFile的每一个实例是用来表示文件系统中的一个文件或目录 package day06; ...

  7. linux下设置固定IP

    编辑网卡配置文件 vi /etc/sysconfig/network-script/ifcfg-eth0 进入编辑模式 按i键进行编辑修改 DEVICE=eth0 #物理设备名 IPADDR=192. ...

  8. css3水波纹效果

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. hp-pa安装oracle和bash

    一.安装oracle数据库 安装之前先进行环境检查: 1.检查系统版本 #uname -a 2.查看内存大小 #/usr/contrib/bin/machinfo | grep -i Memory 3 ...

  10. flex自适应小例子

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...