zoukankan      html  css  js  c++  java
  • MVC中ViewBag、ViewData和TempData 的区别与联系

    MVC中ViewBag、ViewData和TempData 的区别与联系[转减增辑]

    ViewData 和 TempData 都可以传递弱类型数据,区别如下:

    ViewData 只在当前 Action 中有效,生命周期和 View 相同;

    TempData  的数据至多只能经过一次Controller传递,并且每个元素至多只能被访问一次,访问以后,自动被删除。

    TempData  一般用于临时的缓存内容或抛出错误页面时传递错误信息,可以将TempData 在使用之前存储到相应的 ViewData 中以备循环使用。

     TempData  保存在Session中,Controller每次执行请求的时候,会从Session中先获取 TempData,而后清除Session,获取完TempData数据,虽然保存在内部字典对象中,但是其集合中的每个条目访问一次后就从字典表中删 除。具体代码层面,TempData获取过程是通过SessionStateTempDataProvider.LoadTempData方法从 ControllerContext的Session中读取数据,而后清除Session,故TempData只能跨Controller传递一次。

     Index

    public ActionResult Index()
    {
        ViewBag.Message = "Welcome to ASP.NET MVC!";
        ViewData["myName"] = "我的名字";
        TempData["myAgeOne"] = "26岁";
        TempData["myAgeTwo"] = "27岁";
        return View();
    }
    姓名:@ViewData["myName"]
    <br />
    年龄1:@TempData["myAgeOne"]

    About

    姓名:@ViewData["myName"]
    <br />
    年龄1:@TempData["myAgeOne"]
    <br />
    年龄2:@TempData["myAgeTwo"]

    ViewBag.Name=ViewData["Name"];

    相同:使用同一个字典集合(数据源)

    不同:ViewBag 是 MVC3 新增语法,ViewBag 不再是字典的键值对结构,而是 dynamic 动态类型,它会在程序运行的时候动态解析。

    三者相比之下ViewBag  和ViewData生命周期相同,也是对但前View有效,不同的是ViewBag的类型不再是字典的键值对结构,而是dynamic动态类型,属于Mvc3里面新增的部分。

    Ray 补充:有两个同名action的,接收和显示数据一般写在第一个action里方才有效。

  • 相关阅读:
    设计模式之策略模式
    设计模式之简单工厂模式
    UML 之关系
    C# delegate (001)
    转: 编写高质量代码改善C#程序的157个建议
    通过配置数据库邮件实现发送邮件
    存储过程学习(004)--象写程序一样的写存储过程及调试
    存储过程学习(003)--象写程序一样的写存储过程及调试
    存储过程学习(002)--循环插入数据
    jQ新的事件绑定方法on()
  • 原文地址:https://www.cnblogs.com/Raywang80s/p/2790346.html
Copyright © 2011-2022 走看看