在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. mock the facade

    mock the facade: Auth::shouldReceive('user')->andReturn($user = m::mock('StdClass')); $user->s ...

  2. 关于C#使用Dllimport 导入vc++动态库后网站部署提示 “无法加载 DLL,找不到指定模块”的解决方法。

    这次项目需要,做了一个C#写的WebService服务给外部调用,服务内部引用了算法库,本地调试已经通过,现场部署服务时各种提示找不到DLL文件. 第一.如果是包含有32位库在64位服务器系统上运行, ...

  3. jQuery jQuery对象与dom对象的转换

    jQuery对象本质上是一个构造函数,主要作用是返回jQuery对象的实例. jQuery选择器返回的是一个类似数组的对象,用下标运算取出的对象如$('body')[0],是dom对象,对此jquer ...

  4. 《Linux及安全》实践3.3

    <Linux及安全>实践三 字符集总结与分析 [by lwr] 一.ISO.UCS/UTF.GB系列字符集分析 1.字符集&字符编码 字符集(Charset):是一个系统支持的所有 ...

  5. 超好用的网页栅格化工具: GridGuide

    平面设计中使用栅格化设计是相当重要的,特别是网页和VI设计方面,在设计前都需要来好栅格,但是选择合适栅格和计算无疑是浪费了设计师不少的时间,然而当遇上今天的神器「GridGuide」在线工具,以后再也 ...

  6. 一些NSArray,NSDictionary,NSSet相关的算法知识

    iOS编程当中的几个集合类:NSArray,NSDictionary,NSSet以及对应的Mutable版本,应该所有人都用过.只是简单使用的话,相信没人会用错,但要做到高效(时间复杂度)精确(业务准 ...

  7. Python开发【杂货铺】:模块logging

    logging模块 很多程序都有记录日志的需求,并且日志中包含的信息即有正常的程序访问日志,还可能有错误.警告等信息输出,python的logging模块提供了标准的日志接口,你可以通过它存储各种格式 ...

  8. (转载)Spring的refresh()方法相关异常

    如果是经常使用Spring,特别有自己新建ApplicationContext对象的经历的人,肯定见过这么几条异常消息:1.LifecycleProcessor not initialized - c ...

  9. SqlServer try catch 捕获不到的一些错误及解决方法(转载)

    测试注意 :①假如系统能捕获异常 ,并且我们自己开启了事务.系统会自动 回滚事务的,但是 我们还是要在catch里面加上 rollback tran的习惯,这样也不会提示重复rollback的错误,这 ...

  10. cocos2dx 入门

    1.设置环境变量 JAVA_HOME=C:\Program Files\Java\jdk1.7.0_17CLASSPATH=.;%JAVA_HOME%\lib;Path增加%JAVA_HOME%\bi ...