zoukankan      html  css  js  c++  java
  • ViewData,ViewBag和TempdData的区别

    在asp.net mvc程序设计中,传递数据常常会用到viewdata、viewbag、tempdata,这3个对象都可以用来传递数据,但他们在细节中有很多的不同之处。
    ViewData:ViewData是一个字典集合,通过key值读取对应的value使用方法:ViewData["myname"]="张三"
    ViewBag:是动态类型,作用和ViewData一样,都是用来存储信息,有一些不同的是ViewData是object类型,ViewBag是动态类型,从运行效率上来讲,ViewBag 高于ViewData。在实际开发中,通不只用其中一种。使用方法:ViewBag.data="张三"
    TempData:跨请求数据传递,它的机制类似于Session对象,不同的页面之间可以传递参数,但TempData只保存上一次的数据,当页面再次刷新,数据消失。使用方法:TempData["myname"]="张三"


    区别总结
    1. ViewData和TempData是字典类型,赋值方式用字典方式, ViewData["myName"] = MyName
    2. ViewBag是动态类型,使用时直接添加属性赋值即可 ViewBag.myName = MyName
    3. ViewBag和ViewData只在当前Action中有效,等同于View
    4. TempData可以通过转向继续使用,因为它的值保存在Session中。但TempData只能经过一次传递,之后会被系统自动清除
    5. ViewData和ViewBag 中的值可以互相访问,因为ViewBag的实现中包含了ViewData


    ViewBag & ViewData 的例子:
    public ActionResult Index()
    {
        ViewBag.Name = "Monjurul Habib";
        return View();
    }
    
    
    public ActionResult Index()
    {
        ViewData["Name"] = "Monjurul Habib";
        return View();
    }

    在视图中:

    @ViewBag.Name 
    @ViewData["Name"]

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

    public ActionResult ProduceOutput() {
            TempData["Message"] = "Warning message from Derived Controller.";
            return Redirect("/Home/Index");
        }

    在 Views/Home 目录下的 Index.cshtml 中,取 TempData 中的数据如下:

    ...
    @TempData["Message"]

    一般在当前 View 中使用 ViewBag 或 ViewData,在两个请求之间传递临时数据用 TempData。由于 TempData 被使用后即被释放,所以如果要二次使用 TempData 中的数据就需要将其存到其他变量中。

  • 相关阅读:
    选择排序
    java面试题08
    java面试题07
    java面试题06
    java面试题05
    oop.1
    4
    3
    Struts1中actionform和action属于MVC哪一层
    mysql查询时间段的所有数据
  • 原文地址:https://www.cnblogs.com/lchsirblog/p/7248871.html
Copyright © 2011-2022 走看看