一、说明

本文章主要是讲解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的使用

控制器代码

  public class HomeController : Controller
{
//
// GET: /Home/
public ActionResult Index()
{
string[] myArray = {"one","two","three" };
ViewBag.myItem = myArray;
return View();
}
}

view视图代码如下:

 @{
ViewBag.Title = "Index";
} <h2>Index</h2>
<h1>以下是ViewBag的用法</h1>
<ul>
@foreach (var item in ViewBag.myItem)
{
<li>@item</li>
}
</ul>

运行效果

2、ViewData

控制器代码

  public class HomeController : Controller
{
//
// GET: /Home/
public ActionResult Index()
{
string[] myArray = {"one","two","three" };
ViewData["myItem"] = myArray;
return View();
} }

Index.cshtml代码如下:

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

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

运行效果:

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

控制器代码

  public class HomeController : Controller
{
//
// GET: /Home/ public ActionResult Index()
{
string[] myArray = {"one","two","three" };
TempData["myItem"] = myArray;
return View();
} }

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方法中

  public ActionResult Index()
{
string[] myArray = {"one","two","three" };
TempData["myItem"] = myArray;
return View();
}
public ActionResult Search() {
return View(TempData["myItem"]);
}

Search.cshtml页面的代码

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

运行效果:

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

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

  1. mvc4中viewbag viewdata 和 tempdata的区别

    ViewBag 不再是字典的键值对结构,而是 dynamic 动态类型,它会在程序运行的时候动态解析. eg: ViewBag.NumberObjs = new string[] { "on ...

  2. Asp.net MVC中的ViewData与ViewBag

    Asp.net MVC中的ViewData与ViewBag 在Asp.net MVC 3 web应用程序中,我们会用到ViewData与ViewBag,对比一下: ViewData ViewBag 它 ...

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

    MVC3中 ViewBag.ViewData和TempData的使用和区别   在MVC3开始,视图数据可以通过ViewBag属性访问,在MVC2中则是使用ViewData.MVC3中保留了ViewD ...

  4. WebSocket在ASP.NET MVC4中的简单实现

    WebSocket在ASP.NET MVC4中的简单实现 2013-12-21 20:48 by 小白哥哥, 810 阅读, 3 评论, 收藏, 编辑 WebSocket 规范的目标是在浏览器中实现和 ...

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

    在上一篇"在ASP.NET MVC4中实现同页面增删改查,无弹出框01,Repository的搭建"中,已经搭建好了Repository层,本篇就剩下增删改查的界面了......今 ...

  6. ASP.NET MVC4中的bundles特性引发服务器拒绝访问(403错误)

    在ASP.NET MVC4中微软引入了bundles特性,这个特性可以将服务器端的多个Javascript或多个css文件捆绑在一起作为一个单一的URL地址供客户端浏览器调用,从而减少了页面上Http ...

  7. ASP.NET MVC4中使用NHibernate

    ASP.NET MVC4中使用NHibernate 1:下载安装NHibernate 打开 VS 2012新建一个 MVC4项目. 在项目名称上右击选择Manage NuGet Packages.你会 ...

  8. C#面试题(转载) SQL Server 数据库基础笔记分享(下) SQL Server 数据库基础笔记分享(上) Asp.Net MVC4中的全局过滤器 C#语法——泛型的多种应用

    C#面试题(转载) 原文地址:100道C#面试题(.net开发人员必备)  https://blog.csdn.net/u013519551/article/details/51220841 1. . ...

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

    在BundleConfig.cs中,指定CSS和JS,主要用来压缩JS和CSS   在ASP.NET MVC4中(在WebForm中应该也有),有一个叫做Bundle的东西,它用来将js和css进行压 ...

随机推荐

  1. elementui table 分页 和 tabel 前加序列号

    记录下来备忘 结构如下 Report.vue <template> <div> <home-header></home-header> <div ...

  2. 如果dom节点是动态添加进页面的,在页面节点绑定事件如何解决的问题。

    如果dom节点是动态添加进页面,想在节点绑定事件,传统的做法就是遍历节点,但会出现问题,也肯能有其他的办法,突然想到 可以依据事件冒泡,这样就不惧页面后添加节点而不响应事件的问题.比较结实.示例代码如 ...

  3. hdu 1077(单位圆覆盖问题)

    Catching Fish Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)To ...

  4. BZOJ3751 NOIP2014 解方程(Hash)

    题目链接  BZOJ3751 这道题的关键就是选取取模的质数. 我选了4个大概几万的质数,这样刚好不会T 然后统计答案的时候如果对于当前质数,产生了一个解. 那么对于那些对这个质数取模结果为这个数的数 ...

  5. [笔记][Web]利用JS生成博文目录及CSS定制博客

    0. 简介 进入到cnblog这个大园子以后,和其他的一些博客网站比起来,少了些小功能,比如旁边CSDN上的目录.不过好在大神辈出,博客园可以通过申请JS权限来进行目录的生成. 由于本人在JS以及CS ...

  6. 分享Kali Linux 2017年第12周镜像文件

    分享Kali Linux 2017年第12周镜像文件 Kali Linux官方于3月19日发布2017年的第12周镜像.这次维持了11个镜像文件的规模.默认的Gnome桌面的4个镜像,E17.KDE. ...

  7. Linq查询满足条件记录集

    通过linq查询datatable数据集合满足条件的数据集 1.首先定义查询字段的变量,比方深度 string strDepth=查询深度的值: var dataRows = from datarow ...

  8. 20. Spring Boot Servlet【从零开始学Spring Boot】

    转载:http://blog.csdn.net/linxingliang/article/details/52069482 Web开发使用 Controller 基本上可以完成大部分需求,但是我们还可 ...

  9. vue2.0 自定义 侧滑删除(LeftSlider)组件

    1.自定义侧滑删除组件 LeftSlider.vue <!-- 侧滑删除 组件 --> <template> <div class="delete"& ...

  10. [3 Jun 2015 ~ 9 Jun 2015] Deep Learning in arxiv

    arXiv is an e-print service in the fields of physics, mathematics, computer science, quantitative bi ...