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里方才有效。

  • 相关阅读:
    js截取字符串区分汉字字母代码
    List 去处自定义重复对象方法
    63. Unique Paths II
    62. Unique Paths
    388. Longest Absolute File Path
    41. First Missing Positive
    140. Word Break II
    139. Word Break
    239. Sliding Window Maximum
    5. Longest Palindromic Substring
  • 原文地址:https://www.cnblogs.com/Raywang80s/p/2790346.html
Copyright © 2011-2022 走看看