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视图代码如下:

 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>

运行效果

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     }

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     }

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         }

Search.cshtml页面的代码

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

运行效果:

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

原文地址:https://www.cnblogs.com/net064/p/8408987.html

时间: 2024-11-05 15:57:03

ASP.NET MVC4中ViewBag、ViewData和TempData的使用和区别的相关文章

MVC3中 ViewBag、ViewData和TempData的使用和区别(转发:汴蓝)

MVC3中 ViewBag.ViewData和TempData的使用和区别 在MVC3开始,视图数据可以通过ViewBag属性访问,在MVC2中则是使用ViewData.MVC3中保留了ViewData的使用.ViewBag 是动态类型(dynamic),ViewData 是一个字典型的(Dictionary).它们的定义如下: public dynamic ViewBag { get; } public ViewDataDictionary ViewData { get; set; } 控制器

在ASP.NET MVC4中实现同页面增删改查,无弹出框02,增删改查界面设计

在上一篇"在ASP.NET MVC4中实现同页面增删改查,无弹出框01,Repository的搭建"中,已经搭建好了Repository层,本篇就剩下增删改查的界面了......今天的阳光真特么好,写完本篇,好出去在阳光下溜溜狗.散散步什么的,正所谓文武之道一张一弛,走神了,进入正题. 首先是一个View Model,在这里定义验证规则,提交和保存数据的时候还必须和领域模型映射. using System; using System.ComponentModel.DataAnnotat

ASP.NET MVC4中的App_start中BundleConfig的介绍使用

在BundleConfig.cs中,指定CSS和JS,主要用来压缩JS和CSS   在ASP.NET MVC4中(在WebForm中应该也有),有一个叫做Bundle的东西,它用来将js和css进行压缩(多个文件可以打包成一个文件),并且可以区分调试和非调试,在调试时不进行压缩,以原始方式显示出来,以方便查找问题. 具体优势可自行百度或参看官方介绍:http://www.asp.net/mvc/tutorials/mvc-4/bundling-and-minification 这里仅简单记录下如

asp.net mvc4中model与Model的区别

@model模型定义 使用@model关键字可以定义一个Action里所对应的一个模型(经常可以叫他实体类), 其实是对动态变量进行实例化,这样就可以直接在cshtml文件中调用“Model”变量. 而这个模型的实例,需要通过Controller进行传输,如果没有则“Model”将为null. 模型可以是一个实体类,也可以是一个列表实例,字典对象都可以进行定义,但是和 Controller中的Action传回来的实例一定要一样,否则将会出现错误. Model 定义 MVC的第一个字母M是Mode

Asp.Net MVC4开发二: Entity Framework在Asp.Net MVC4中的应用

ORM作为一种数据库访问机制已广泛地应用于各种项目当中,在.Net开发中,应用比较广泛的ORM框架大致有下面几个: 官方支持的有:Linq to SQL,Entity Framework.三方的有:NHibernate.前面介绍过Linq to SQL的应用,这篇介绍一下Entity Framework在Asp.Net MVC4中的应用. 首先用Visual Studio(2012或2013,其它版本需要安装Asp.Net MVC4)创建一个Asp.Net MVC4的项目,项目创建完成后会发现E

ASP.NET MVC4中使用Ninject

1.NuGet获取Ninject.dll .NET技术交流群 199281001 .欢迎加入. 2.全局注册  Global.asax.cs 1 //注册Ninject依赖注入全局解析器 2 GlobalConfiguration.Configuration.DependencyResolver = new System.Web.Http.Dependencies.NinjectDependencyResolver(new Ninject.StandardKernel()); RegisterN

使用asp.net MVC4中的Bundle遇到的问题及解决办法分享

本文转自http://www.jb51.net/article/47264.htm 这篇文章主要介绍了使用asp.net MVC4中的Bundle遇到的问题及解决办法,需要的朋友可以参考下 背景    之前有过使用MVC3的经验,也建过MVC4的基本样例看过,知道有bundle这么一个方法. 近日想建个网站使用MVC4,但是我觉得在基本样例上改不好,有太多无用的东西,所以就建了一个空白的MVC的程序,然后自己写需要的东西, 将程序的目标框架从4.5降到了4.0(我使用的是VS2013),问题就来

Asp.net MVC中的ViewData与ViewBag

在Asp.net MVC 3 web应用程序中,我们会用到ViewData与ViewBag,对比一下: 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中查询数据时需要转换合适的类型 在V

MVC3中 ViewBag、ViewData和TempData的使用和区别

在MVC3开始,视图数据可以通过ViewBag属性访问,在MVC2中则是使用ViewData.MVC3中保留了ViewData的使用.ViewBag 是动态类型(dynamic),ViewData 是一个字典型的(Dictionary).它们的定义如下: public dynamic ViewBag { get; } public ViewDataDictionary ViewData { get; set; } 控制器中代码: public ActionResult Index() { Vie