一、ViewBag和ViewData的定义

public dynamic ViewBag { get; }
public ViewDataDictionary ViewData { get; set; }


二、ViewBag和ViewData的差别

viewdata viewbag
它是key/value字典集合 它是dynamic类型对象
从asp.net mvc1就有了 从asp.netmvc3才有
基于asp.netframework 3.5 基于asp.net framework4.0
viewdata比viewbag快 viewbag比viewdata慢
页面查询数据时须要转换合适的类型 在页面查询数据时不须要转换合适的类型
有一些类型转换代码 可读性较好

ViewBag不再是字典的键值对结构。而是dynamic动态类型,它会在程序执行的时候动态解析。




1、ViewBag事实上本质就是ViewData,仅仅是多了层Dynamic控制。所以,使用何种方式全然取决于你的个人爱好。

2、ViewBag和ViewData仅针对当前Action中有效,生命周期和view同样


三、TempData

      保存在session中,Controller每次运行请求时。会从session中获取tempdata。而后清空session,获取完tempdata数据,尽管保存在内部字典中。

可是字典中每一个条目訪问一次后就从字典中删除。因此Tempdata数据最多仅仅能经过一次controller传递。而且每一个元素最多仅仅能訪问一次,之后删除



四、举例


在Controller中使用ViewData:



ViewBag controller:

        public ActionResult UsingViewBag()
        {
            ViewBag.Title = "Using ViewBag";
            ViewBag.ProjectName = "My Test Project";
            ViewBag.ProjectDescription = "This is Test Project to demo Viewdata and viewbag details";
            ViewBag.StartDate = new DateTime(2011, 1, 1);
            ViewBag.TotalPrice = 1000;
            ViewBag.TotalDays = 100;
            Dictionary<string, string> stackholder = new Dictionary<string, string>();
            stackholder.Add("Client", "Mr.Client");
            stackholder.Add("Manager", "Mr.Joy");
            stackholder.Add("Team Leader", "Mr.Toy");
            stackholder.Add("Sr.developer", "Mr.doyjoy");
            stackholder.Add("developer", "Mr.nodoy");
            ViewBag.stackholder = stackholder;

            List<string> modules = new List<string>();
            modules.Add("Admin module");
            modules.Add("ShoppingCart module");
            modules.Add("CMS module");
            ViewBag.modules = modules;
            return View();
        }

相应的页面:

@{
    ViewBag.Title = "UsingViewBag";
}

<h1>@ViewBag.Title</h1>
 <div>
   <div>
    <h2>Project Name : @ViewBag.ProjectName</h2>
   </div>
   <div>
     ProjectDescription :   
     <p>"@ViewBag.ProjectDescription.</p>
   </div>
   <div>
      Stack Holder :
      <br />

      <ul >
      @foreach ( var stakerholder in ViewBag.stackholder )
      {          
    <li>
        @stakerholder.Key   : @stakerholder.Value
    </li>
      }
     </ul>
   </div>
   <div>
     Project Details:<br />
     <div>
       module List  :
       <ul >
      @foreach ( var module in ViewBag.modules )
      {          
    <li>
        @module
    </li>
      }
     </ul>
        
     </div>
     Project StartDate : @ViewBag.StartDate.ToString("dd-MMM-yyyy") <br />
     Project TotalPrice: @ViewBag.TotalPrice  ₹  <br />
     Project TotaDays  : @ViewBag.TotalDays 
   </div>
 </div>

五、总结


1、ViewDataTempData是字典类型,赋值方式用字典方式。ViewData["myName"] 

2、ViewBag是动态类型,使用时直接加入属性赋值就可以 ViewBag.myName

3、ViewBagViewData仅仅在当前Action中有效,等同于View

4、TempData能够通过转向继续使用,由于它的值保存在Session中。但TempData仅仅能经过一次传递。之后会被系统自己主动清除

5、ViewDataViewBag中的值能够互相訪问。由于ViewBag的实现中包括了ViewData


相关文章:

  • 2021-07-23
  • 2021-10-07
  • 2021-10-07
  • 2022-12-23
  • 2021-07-28
  • 2021-08-15
猜你喜欢
  • 2021-05-24
  • 2022-12-23
  • 2021-06-15
  • 2021-10-21
  • 2021-05-18
  • 2021-06-02
相关资源
相似解决方案