• ASP.NET MVC4中ViewBag、ViewData和TempData的使用和区别


    一、说明

    本文章主要是讲解asp.net mvc中ViewBag、ViewData和TempData的使用和区别,ViewBag、ViewData和TempData常常用于将action方法中的数据传递到view界面。 从MVC3开始,视图数据可以通过ViewBag属性访问,在MVC2中则是使用ViewData。MVC3中保留了ViewData的使用。ViewBag 是动态类型(dynamic),ViewData 是一个字典型的(Dictionary)。

    二、区别

    ViewBag 不再是字典的键值对结构,而是 dynamic 动态类型,它会在程序运行的时候动态解析。只是ViewData为object型,而ViewBag为dynamic型。而dynamic型与object型的区别则是在使用时它会自动根据数据类型转换,而object型则需要我们自己去强制转换。

         同ViewData和ViewBag一样,TempData也可以用来向视图传递数据。只是ViewData和ViewBag的生命周期和View相同,只对当前View有用,且不能在不同的action之间进行传值。而TempData则可以在不同的Action中进行传值,类似webform里的Seesion

    三、使用示例

    1、ViewBag的使用

    控制器代码

     1  public class HomeController : Controller
     2     {
     3         //
     4         // GET: /Home/
     5         public ActionResult Index()
     6         {
     7             string[] myArray = {"one","two","three" };
     8             ViewBag.myItem = myArray;
     9             return View();
    10         }
    11     }
    View Code

    view视图代码如下:

     1 @{
     2     ViewBag.Title = "Index";
     3 }
     4 
     5 <h2>Index</h2>
     6 <h1>以下是ViewBag的用法</h1>
     7 <ul>
     8     @foreach (var item in ViewBag.myItem)
     9     {
    10     <li>@item</li>
    11     }
    12 </ul>
    View Code

    运行效果

    2、ViewData

    控制器代码

     1  public class HomeController : Controller
     2     {
     3         //
     4         // GET: /Home/
     5         public ActionResult Index()
     6         {
     7             string[] myArray = {"one","two","three" };     
     8             ViewData["myItem"] = myArray;           
     9             return View();
    10         }     
    11 
    12     }
    View Code

    Index.cshtml代码如下:

    <h1>以下是viewdata的用法</h1>
    <ul>
        @foreach(var item in (string[])ViewData["myItem"])
        {
            <li>@item</li>
        }
    </ul>

    注意:应用ViewData["myItem"]时,要记得类型转换比如 :(string[])

    运行效果:

    3、TempData在action传数据到view的应用

    控制器代码

     1  public class HomeController : Controller
     2     {
     3         //
     4         // GET: /Home/
     5 
     6         public ActionResult Index()
     7         {
     8             string[] myArray = {"one","two","three" };   
     9             TempData["myItem"] = myArray;
    10             return View();
    11         }
    12      
    13     }
    View Code

    Index.cshtml页面代码如下:

    <h1>以下是TempData的用法</h1>
    <ul>
        @foreach(var item in (string[])TempData["myItem"])
        {
        <li>item is :@item</li>
        }
    </ul>

    注意:应用TempData["myItem"]时,要记得类型转换比如 :(string[])

     运行效果:

    4、TempData在action间传递数据的应用

    控制器代码:

    在控制器代码中,在action Index中定义的数据,   TempData["myItem"] = myArray;被传递到action  Search方法中

    1  public ActionResult Index()
    2         {
    3             string[] myArray = {"one","two","three" };          
    4             TempData["myItem"] = myArray;
    5             return View();
    6         }
    7         public ActionResult Search() {
    8             return View(TempData["myItem"]);
    9         }
    View Code

    Search.cshtml页面的代码

    <h2>Search</h2>
    <ul>
        @foreach(var item in (string[])TempData["myItem"])
        {
        <li>item is :@item</li>
        }
    </ul>

    运行效果:

    需要注意的是:TempData["myItem"]中的数据,只能被提取、引用一次,再次刷新界面,都会报错,因为TempData["myItem"]中的数据已经被删除。

  • 相关阅读:
    Java实现 蓝桥杯VIP 算法提高 3000米排名预测
    Java实现 蓝桥杯VIP 算法提高 3000米排名预测
    Java实现 蓝桥杯VIP 算法提高 班级排名
    Java实现 蓝桥杯VIP 算法提高 班级排名
    Java实现 蓝桥杯VIP 算法提高 班级排名
    Java实现 蓝桥杯VIP 算法提高 班级排名
    当时忍住就好了(要抵住诱惑,也不要在极端情绪下做出决定,一切向前看)
    MFC中的模态对话框与非模态对话框,模态对话框测试
    在iOS中创建静态库
    delphi三层架构(使用SATRDA改造,客户端代码不变)
  • 原文地址:https://www.cnblogs.com/net064/p/8408987.html
Copyright © 2020-2023  润新知