译:什么是ViewData的, ViewBag和TempData?

摘要:
ViewData与ViewBag相似,但TempData不同。让我们讨论或总结这三个方面的要点:ViewBag和ViewData之间的区别:ViewData是一个字典对象,继承自ViewDataDictionary类,并将字符串(string)作为访问对象的键。ViewBag是一个动态属性,这是c#4.0中添加的一个出色的动态特性。ViewData需要执行数据类型转换以确定书籍是否为空,以防止错误。ViewBag&ViewData示例:publicActionResultIndex(){ViewBag.Name=“MonjurulHabib”;returnView();}publicActionResultIndex(){ViewData[“Name”]=“MonjurulHabib”;returnView();}在视图中:@ViewBag.Name@ViewData[“Name”]TempData:TempData也是一种字典类型,继承自TempDataDictionary类。TempData颜色生命周期是http请求的时间。对于ViewData和viewbag,您需要在应用程序中保持灵活性。

译文出处:http://www.codeproject.com/Articles/476967/WhatplusisplusViewData-cplusViewBagplusandplusTem

ASP.NET MVC提供3种选择ViewData,ViewBag,TempData来从controller到View及后续请求传输数据。

ViewData和ViewBag很相似,而TempData有所不同。

让我们来讨论或总结三者的要点:

ViewBag 和 ViewData的区别:

  1. ViewData 是一个字典对象,从ViewDataDictionary 类继承,已string(字符串)作为键来访问对象。
  2. ViewBag 是一个动态属性,是c#4.0新增的优秀的动态特性。
  3. ViewData 需要进行数据类型转换,判断书否为null值来防止出错。

4.ViewBag 不需要类型转换。

ViewBag & ViewData 的例子:

publicActionResult Index()
{
    ViewBag.Name = "Monjurul Habib";
    returnView();
}
publicActionResult Index()
{
    ViewData["Name"] = "Monjurul Habib";
    returnView();
}

在视图中:

@ViewBag.Name 
@ViewData["Name"]

TempData:

TempData也是一个字典类型,从TempDataDictionary类继承而来。存储在短暂的会话中。键 为string类型,值为object类型。

所不同的是对象的生命周期。TempData色生命周期是一个http请求的时间。意思就是从一个页面跳转到另一个页面的时间。保持302/303的重新定向因为他们是在同一个请求中。

当你从一个control到另一个control或一个page到另一个page之间跳转的时候帮你保存数据。它内部使用了会话(session)机制。主要用在从一个页面跳到另外一个页面期间来存储数据。

需要进行数据类型转换,检查是否为null来规避错误。通常用于存储一个时间信息,错误信息或验证信息。

publicActionResult Index()
{
  var model = newReview()
            {
                Body = "Start",
                Rating=5
            };
    TempData["ModelName"] =model;
    return RedirectToAction("About");
}
<pre><pre lang="cs">publicActionResult About()
{
    var model= TempData["ModelName"];
    returnView(model);
}

最后一个机制就是Session,工作方式就像viewdata,字典类型等键值方式,键一般为string类型,值可以是object类型。这种方式,是把数据存储在客户端的cookie里,可以保存较长的一段时间。也需要进行行验证,但是没有安全保障。关于ViewData 和viewbag你需要在程序中较灵活的应运。因为每一个页面的动作都贯穿asp.net 整个生命周期。你可以在子页面中使用viewdata/viewbag,但是要细心,你是不是用它来填充无关的数据,会污染你的控制器。

免责声明:文章转载自《译:什么是ViewData的, ViewBag和TempData?》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇iOS -- MBProgressHUBUEditor百度网页编辑器JSP版配置与调试下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

android之View坐标系(view获取自身坐标的方法和点击事件中坐标的获取)

在制作视图背景特效时,我被各种获取坐标的方法弄糊涂了,来回复制的几篇博文也不清楚。涉及以下方法:view获取自己的坐标:getLeft()、getTop()、getRight()和getBottom()view获取自己自己的宽度和高度:getHeight(),getWidth()motionEvent获取其坐标:getX()、get Y()、Get RawX...

fullcalendar日历控件知识点集合

除非对于极少的特殊需求,fullcalendar向我们提供的接口不足以满足,才会去改动fullcalendar本身的js文件。这些会议安排一般是保存在server的,在每次页面载入时,fullcalendar得到会议安排的集合,然后依照当中的日期去把事件描绘到日历相应的地方。...

JAVA 实现CLOB转String

CLOB定义了用于在数据库中保存文件的类型。SQLCLOB是一种内置类型,它将一个大型字符对象作为列值存储在数据库表的一行中。默认情况下,驱动程序使用SQLlocator实现Clob对象,这意味着Clob对象包含指向SQLCLOB数据的逻辑指针,而不是数据本身。Clob对象在其创建的事务期间有效。在一些数据库系统中,文本也用作CLOB的别名。例如,SQL S...

Revit导入lumion渲染

利用Revit导出DAE文件格式插件,可以将Revit模型导入到lumion中进行图片渲染和漫游动画的制作。lumion强大的漫游功能,丰富的附加组件,绚丽的视频特效。lumion没有建模功能,但是Revit建模的没有统一的标准,导致一些不该同样的材质的地方,无法更改;如果有统一的标准,那么Revit结合lumion能做出任何想要的效果。Revit13版本能...

如何快速把ps序列图层建立帧动画?

工具ps1。将序列帧图片加载到ps新建-˃脚本-˃将文件加载到堆栈2中。创建序列帧动画窗口-˃时间线-˃时间线面板的右上菜单-˃从层3创建帧。移除多余的透明画布选择所有层-˃图像-˃剪辑-˃基于透明度4。将图层保存到图片文件-˃脚本-˃将图层保存为文件隐藏白色背景5。导出序列框架文件-˃自动-˃联系人表6存储为png...

CSS躬行记(8)——裁剪和遮罩

裁剪最早是在CSS2.1时代由clip属性引入,但该属性只能应用于绝对定位的元素,并且只能裁剪成矩形。CSS3提供了强大的clip-path属性,突破了clip属性的众多限制,接下来将围绕clip-path属性展开讲解。3)裁剪路径对于复杂的形状,可以采用SVG来创建裁剪路径,实现自定义。2)替换元素的填充和定位CSS3引入了两个新属性,用于遮罩替换元素。...