MVC ViewData和ViewBag

简介:       视图数据可以通过ViewBag属性访问,它主要是为了从Controller到view进行传值用的,类似有所使用的ViewData[] 字典类。对于ViewBag是如此的强大,意味着你能动态的set/get 值,增加任何数量的的额外字段而不需要强类型的检测。
      视图数据可以通过ViewBag属性访问,它主要是为了从Controller到view进行传值用的,类似有所使用的ViewData[] 字典类。对于ViewBag是如此的强大,意味着你能动态的set/get 值,增加任何数量的的额外字段而不需要强类型的检测。如:

Controller

public ActionResult Index()
{
List< string > colors = new List< string >();
colors.Add( "red" );
colors.Add( "green" );
colors.Add( "blue" );
 
ViewData[ "listColors" ] = colors;
ViewData[ "dateNow" ] = DateTime.Now;
ViewData[ "name" ] = "Hajan" ;
ViewData[ "age" ] = 25;
 
return View();
}

Controller

1
2
3
4
5
6
7
8
9
10
11
12
13
public ActionResult Index()
{
List< string > colors = new List< string >();
colors.Add( "red" );
colors.Add( "green" );
colors.Add( "blue" );
 
ViewBag.ListColors = colors; //colors is List
ViewBag.DateNow = DateTime.Now;
ViewBag.Name = "Hajan" ;
ViewBag.Age = 25;
return View();
}

 你和上面的对比 你看见了不同吗?

View
对应前台视图:

1.使用ViewData

<p>
My name is <b>@b>,
b>@b>years old.
<br />
I like the following colors:
</p>
<ul id="colors">
foreach (var color in ViewData["listColors"] as List<string>)
{
<li><font color="@color">@color </font></li>
}
</ul>
<p>
</p>

2.使用ViewBag

<p>
My name is <b>@b>, <b>@b> years old.
<br />
I like the following colors:
</p>
<ul id="colors">
foreach (var color in ViewBag.ListColors)
{
<li><font color="@color">@color</font> </li>
}
</ul>
<p>
</p>
效果图:

 
 
 
ViewBag、ViewData 和 TempData 的区别:
ViewData 和 TempData 都可以传递弱类型数据,区别如下:
ViewData 只在当前 Action 中有效,生命周期和 View 相同;
TempData 的数据至多只能经过一次Controller传递,并且每个元素至多只能被访问一次,访问以后,自动被删除。
TempData 一般用于临时的缓存内容或抛出错误页面时传递错误信息,可以将TempData 在使用之前存储到相应的 ViewData 中以备循环使用。

作者:Tyler Ning
出处:http://www.cnblogs.com/tylerdonet/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,如有问题,可以通过以下邮箱地址williamningdong@gmail.com  联系我,非常感谢。

目录
相关文章
|
Web App开发
MVC3-找不到ViewBag
在MVC3应用程序中,使用razor视图,但是总是提示 当前上下文中不存在名称“ViewBag” 网上查了 下都说是跟MVC3的版本安装有关,我的mvc3环境是vs2012自带安装的。 重新新建一个MVC3应用程序做测试,发现可以启动razor视图,随仔细检查webconfig文件,发...
916 0
|
前端开发
MVC中cshtml文件中怎样使用ViewBag进行筛选?
@foreach (PermissionForRoleModel item in ((List)ViewBag.PermissionsForRole).Where(p => string.IsNullOrWhiteSpace(p._parentId))) { @item.PermissionName } 注意必须要做强类型转移,不然不能使用lambda表达式进行筛选。
1044 0
|
前端开发 .NET
ASP.NET MVC 5 入门教程 (4) View和ViewBag
原文:ASP.NET MVC 5 入门教程 (4) View和ViewBag 文章来源: Slark.NET-博客园 http://www.cnblogs.com/slark/p/mvc-5-get-started-view.html 上一节:ASP.NET MVC 5 入门教程 (3) 路由Route 下一节:ASP.NET MVC5 + EF6 入门教程 (5) Model和Entity Framework 源码下载:点我下载 View(视图)用来显示被controller处理好的数据。
1188 0
|
前端开发 C# .NET
ASP.NET MVC 2.0 in Vs2010 :使用C# 4.0中使用动态类型来传递ViewData
如果是在使用C#4.0的话用户可以使用Dynamic的特性来动态访问模型中的属性,例如我们也像前面使用ViewData.Model一样传递一个实例,并且我们使用了如果代码在Action的View方法中传递User的一个实例: public ActionResult MyDynamicAction(...
664 0
|
前端开发 .NET 测试技术
[转自Scott]ASP.NET MVC框架(第三部分): 把ViewData从控制器传到视图
英文原文地址:http://weblogs.asp.net/scottgu/archive/2007/12/06/asp-net-mvc-framework-part-3-passing-viewdata-from-controllers-to-views.aspx 翻译原文地址:http://blog.joycode.com/scottgu/archive/2007/12/07/112355.aspx 过去的几个星期内,我一直在写着讨论我们正在开发的新ASP.NET MVC框架的系列贴子。
1214 0
|
3月前
|
开发框架 前端开发 .NET
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
44 0