打赏

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"]中的数据已经被删除。

 

posted @ 2018-02-03 11:34  学习靠自己  阅读(452)  评论(0编辑  收藏  举报