• 浅谈 MVC中的ViewData、ViewBag和TempData


    ViewBag和TempData的区别

    ViewData ViewBag
    它是Key/Value字典集合 它是dynamic类型对像
    从Asp.net MVC 1 就有了 ASP.NET MVC3 才有
    基于Asp.net 3.5 framework 基于Asp.net 4.0与.net framework
    ViewData比ViewBag快 ViewBag比ViewData慢
    在ViewPage中查询数据时需要转换合适的类型 在ViewPage中查询数据时不需要类型转换
    有一些类型转换代码 可读性更好

    在控制器(Controller)中使用

    ViewData:

           Controller里取数据赋值

    var markeType = new MarketDataProvider().GetBTIDData().Where(a=>a.ID!="0"); //在数据库获取数据,这是list数据
          ViewBag.DateType = markeType;//给ViewBag.DateType 赋值  “DateType ”可以随便写名称。

      *  前台调用

    @foreach (var modelMarket in ViewData["Markettype"] as Dictionary<string, string>)
                           {
                                  <div class="row" style="margin-top:10px">
    
                                        <div class="col-md-4 text-right"><span class="red">*</span> @modelMarket.Value</div>
                                    </div>
                            }
    

      

        ViewBag : 

          Controller里取数据赋值

    string str = "商标,版权,交易,国际注册";
    
       string[] strs = str.Split(',');
    
     Dictionary<string, string> dic = new Dictionary<string, string>();
    
                for(int i=0;i<5;i++)
    
                {
    
                    dic.Add(i.ToString(),strs[i]);
    
                }
    
                ViewData["Markettype"] = dic;
    

      

          前台调用:

    @foreach (var modelMarket2 in ViewBag.DateType)
    
                        {
    
                            <div class="row" style="margin-top:10px">
    
                                <div class="col-md-4 text-right"><span class="red">*</span> @modelMarket2.Text</div>
    
                            </div>
    
                        }

        按F12运行网站便可以看到运行结果,两个也可以用于不分页的新闻列表。

    TempData

    TempData也是字典,所以它的使用完全等同于ViewData,但两者之间还是存在很大的差异。

         TempData,顾名思义,就是临时数据。TempData保存在Session中,Controller每次请求的时候都会从Session中获取TempData,然后清除Session。基于这样的事实,在每次请求结束后,TempData的生命周期也就结束了。网上有一句话:TempData至多之只能通过一次Controller传递,假设我们的Controller是跳转到下一个Controller,以此类推,在最后一个Controlle相应的视图上,的确可以获得该TempData。但是,这并不是说TempData已经跨请求传递了,这依然只是一次请求,至于是否是跨Controller传递,我认为不是,所谓的通过Controller传递,是指将TempData传递给View,在上面的例子中,只有最后的Controller才会将该TempData传递给View,所以,TempData的确是只能通过一次Controller传递。

    注:有的文字内容搜自博客园。

  • 相关阅读:
    JavaScript系列---【分析局部作用域下的预解析】
    javaScript系列---【分析全局作用域下的预解析】
    javaScript系列---【分析函数的arguments】
    JavaScript系列---【条件if--切换图片案例2 高亮及按钮同步显示】
    javaScript系列---【this详解及call和apply修改this指向】
    JavaScript系列---【选项卡案例】
    JavaScript系列---【QQ列表展开及闭合案例】
    系统安装01-CentOS6系统安装
    hdoj--3635--Dragon Balls(并查集记录深度)
    hdoj--1281--棋盘游戏(最小点覆盖+枚举)
  • 原文地址:https://www.cnblogs.com/xbhp/p/6395854.html
Copyright © 2020-2023  润新知