在Asp.net MVC 3 web应用程序中,我们会用到ViewDataViewBag,对比一下:

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中查询数据时需要转换合适的类型 在ViewPage中查询数据时不需要类型转换
有一些类型转换代码 可读性更好

在Controller中使用ViewData:

public ActionResult UsingViewData() {          ViewData["Title"] = " Using ViewData";     ViewData["ProjectName"] = "My Test Project";     ViewData["ProjectDescription"] = "This is Test Project to demo Viewdata and viewbag details";     ViewData["StartDate"] = new DateTime(2011, 1, 1);     ViewData["TotalPrice"] = 1000;     ViewData["TotalDays"] = 100;     Dictionary<string, string> stackholder = new Dictionary<string, string>();     stackholder.Add("Client","Mr.  Client");     stackholder.Add("Manager","Mr. Joy");     stackholder.Add("Team Leader","Mr.Toy");     stackholder.Add("Sr. developer", "Mr.dojoy");     stackholder.Add("developer", "Mr. nodoy");     ViewData["stackholder"] = stackholder;      List<string> modules = new List<string>();     modules.Add("Admin module");     modules.Add("ShoppingCart module");     modules.Add("CMS module");     ViewData["modules"] = modules;     return View(); }

对应UsingViewData View的cshtml:

<h1>@ViewData["Title"]</h1>  <div>    <div>     <h2>Project Name : @ViewData["ProjectName"]</h2>    </div>    <div>      ProjectDescription :         <p>"@ViewData["ProjectDescription"]".</p>    </div>    <div>       Stack Holder :       <br />        <ul id="stakholder">       @foreach ( var stakerholder in ViewData["stackholder"] as Dictionary<string, string> )       {               <li>         @stakerholder.Key &nbsp; : @stakerholder.Value     </li>       }      </ul>    </div>    <div>      Project Details:<br />      <div>        module List  :        <ul id="modulelist">       @foreach ( var module in ViewData["modules"] as List<string> )       {               <li>         @module     </li>       }      </ul>               </div>      Project StartDate : @ViewData["StartDate"]  <br />      Project TotalPrice: @ViewData["TotalPrice"] <br />      Project TotaDays  : @ViewData["TotalDays"]     </div>  </div> 

然后是ViewBag:

public ActionResult UsingViewBag() {      ViewBag.Title = " Using ViewBag";     ViewBag.ProjectName = "My Test Project";     ViewBag.ProjectDescription = "This is Test Project to demo Viewdata and viewbag details";     ViewBag.StartDate = new DateTime(2011, 1, 1);     ViewBag.TotalPrice = 1000;     ViewBag.TotalDays = 100;     Dictionary<string, string> stackholder = new Dictionary<string, string>();     stackholder.Add("Client", "Mr.  Client");     stackholder.Add("Manager", "Mr. Joy");     stackholder.Add("Team Leader", "Mr.Toy");     stackholder.Add("Sr. developer", "Mr.dojoy");     stackholder.Add("developer", "Mr. nodoy");     ViewBag.stackholder = stackholder;      List<string> modules = new List<string>();     modules.Add("Admin module");     modules.Add("ShoppingCart module");     modules.Add("CMS module");     ViewBag.modules = modules;     return View(); }

对应View UsingViewBag 的cshtml的ViewBag:

<h1>@ViewBag.Title</h1>  <div>    <div>     <h2>Project Name : @ViewBag.ProjectName</h2>    </div>    <div>      ProjectDescription :         <p>"@ViewBag.ProjectDescription.</p>    </div>    <div>       Stack Holder :       <br />        <ul id="stakholder">       @foreach ( var stakerholder in ViewBag.stackholder )       {               <li>         @stakerholder.Key &nbsp; : @stakerholder.Value     </li>       }      </ul>    </div>    <div>      Project Details:<br />      <div>        module List  :        <ul id="modulelist">       @foreach ( var module in ViewBag.modules )       {               <li>         @module     </li>       }      </ul>               </div>      Project StartDate : @ViewBag.StartDate.ToString("dd-MMM-yyyy") <br />      Project TotalPrice: @ViewBag.TotalPrice  ₹  <br />      Project TotaDays  : @ViewBag.TotalDays     </div>  </div> 

后面是在Controller中使用ViewBag:

public ActionResult UsingViewBagInControlAndViewDataInView() {      ViewBag.Title = " Using ViewBag In Control And ViewData In View";     ViewBag.ProjectName = "My Test Project";     ViewBag.ProjectDescription = "This is Test Project to demo Viewdata and viewbag details";     ViewBag.StartDate = new DateTime(2011, 1, 1);     ViewBag.TotalPrice = 1000;     ViewBag.TotalDays = 100;     Dictionary<string, string> stackholder = new Dictionary<string, string>();     stackholder.Add("Client", "Mr.  Client");     stackholder.Add("Manager", "Mr. Joy");     stackholder.Add("Team Leader", "Mr.Toy");     stackholder.Add("Sr. developer", "Mr.dojoy");     stackholder.Add("developer", "Mr. nodoy");     ViewBag.stackholder = stackholder;      List<string> modules = new List<string>();     modules.Add("Admin module");     modules.Add("ShoppingCart module");     modules.Add("CMS module");     ViewBag.modules = modules;     return View(); }

在UsingViewBagInControlAndViewDataInView.cshtml中使用ViewData来取值:

<h1>@ViewData["Title"]</h1>  <div>    <div>     <h2>Project Name : @ViewData["ProjectName"]</h2>    </div>    <div>      ProjectDescription :         <p>"@ViewData["ProjectDescription"]".</p>    </div>    <div>       Stack Holder :       <br />        <ul id="stakholder">       @foreach ( var stakerholder in ViewData["stackholder"] as Dictionary<string, string> )       {               <li>         @stakerholder.Key &nbsp; : @stakerholder.Value     </li>       }      </ul>    </div>    <div>      Project Details:<br />      <div>        module List  :        <ul id="modulelist">       @foreach ( var module in ViewData["modules"] as List<string> )       {               <li>         @module     </li>       }      </ul>               </div>      Project StartDate : @ViewData["StartDate"]  <br />      Project TotalPrice: @ViewData["TotalPrice"] <br />      Project TotaDays  : @ViewData["TotalDays"]     </div>  </div> 

反过来是这样的:

public ActionResult UsingViewDataInControlAndViewBagInView() {     ViewData["Title"] = " Using ViewData In Control And ViewBag In View";     ViewData["ProjectName"] = "My Test Project";     ViewData["ProjectDescription"] = "This is Test Project to demo Viewdata and viewbag details";     ViewData["StartDate"] = new DateTime(2011, 1, 1);     ViewData["TotalPrice"] = 1000;     ViewData["TotalDays"] = 100;     Dictionary<string, string> stackholder = new Dictionary<string, string>();     stackholder.Add("Client", "Mr.  Client");     stackholder.Add("Manager", "Mr. Joy");     stackholder.Add("Team Leader", "Mr.Toy");     stackholder.Add("Sr. developer", "Mr.dojoy");     stackholder.Add("developer", "Mr. nodoy");     ViewData["stackholder"] = stackholder;      List<string> modules = new List<string>();     modules.Add("Admin module");     modules.Add("ShoppingCart module");     modules.Add("CMS module");     ViewData["modules"] = modules;     return View(); }

在UsingViewDataInControlAndViewBagInView.cshtml 的View中使用ViewBag来取值:

<h1>@ViewBag.Title</h1>  <div>    <div>     <h2>Project Name : @ViewBag.ProjectName</h2>    </div>    <div>      ProjectDescription :         <p>"@ViewBag.ProjectDescription.</p>    </div>    <div>       Stack Holder :       <br />        <ul id="stakholder">       @foreach ( var stakerholder in ViewBag.stackholder )       {               <li>         @stakerholder.Key &nbsp; : @stakerholder.Value     </li>       }      </ul>    </div>    <div>      Project Details:<br />      <div>        module List  :        <ul id="modulelist">       @foreach ( var module in ViewBag.modules )       {               <li>         @module     </li>       }      </ul>               </div>      Project StartDate : @ViewBag.StartDate.ToString("dd-MMM-yyyy") <br />      Project TotalPrice: @ViewBag.TotalPrice  ₹  <br />      Project TotaDays  : @ViewBag.TotalDays     </div>  </div> 

这样对比看上去会比较清楚一些。在源代码中的ViewBag是这样的属性:

public dynamic ViewBag {     get {         if (_dynamicViewData == null) {             _dynamicViewData = new DynamicViewDataDictionary(() => ViewData);         }         return _dynamicViewData;     } }

ViewData是:

public ViewDataDictionary ViewData {     get {         if (_viewData == null) {             SetViewData(new ViewDataDictionary());         }         return _viewData;     }     set {         SetViewData(value);     } }

具体细节在这儿不深入了,这里只是抛砖引玉。希望对您Asp.net MVC开发有帮助。

出处:http://www.cnblogs.com/wintersun/archive/2012/01/21/2328563.html

Asp.net MVC中的ViewData与ViewBag(转)的更多相关文章

  1. Asp.net MVC中的ViewData与ViewBag

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

  2. ASP.NET MVC 中的ViewData与ViewBag

    在Asp.net MVC 3 web应用程序中,我们会用到ViewData与ViewBag,对比一下: ViewData ViewBag 它是Key/Value字典集合 它是dynamic类型对像 从 ...

  3. [转]Asp.net MVC中的ViewData与ViewBag

    本文转自:http://www.cnblogs.com/wintersun/archive/2012/01/21/2328563.html 在Asp.net MVC 3 web应用程序中,我们会用到V ...

  4. ASP.NET MVC 传值方法ViewData与ViewBag的区别

    一.介绍 在Asp.net MVC 3 web应用程序中,我们会用到ViewData与ViewBag,对比一下: ViewData ViewBag 它是Key/Value字典集合 它是dynamic类 ...

  5. 浅谈 MVC中的ViewData、ViewBag和TempData

    ViewBag和TempData的区别 ViewData ViewBag 它是Key/Value字典集合 它是dynamic类型对像 从Asp.net MVC 1 就有了 ASP.NET MVC3 才 ...

  6. MVC中的ViewData、ViewBag和TempData

    一.ViewBag和ViewData的定义 public dynamic ViewBag { get; } public ViewDataDictionary ViewData { get; set; ...

  7. 关于 ASP.NET MVC 中的视图生成

    在 ASP.NET MVC 中,我们将前端的呈现划分为三个独立的部分来实现,Controller 用来控制用户的操作,View 用来控制呈现的内容,Model 用来表示处理的数据. 从控制器到视图 通 ...

  8. Asp.Net MVC中DropDownListFor的用法(转)

    2016.03.04 扩展:如果 view中传入的是List<T>类型 怎么使用 DropList 既然是List<T> 那么我转化成 T  List<T>的第一个 ...

  9. Asp.Net MVC中DropDownListFor的用法

    在Asp.Net MVC中可以用DropDownListFor的方式来让用户选择已定列表中的一个数值.用法不复杂,这里简单做一个记录. 首先我们要定义一个 Model ,用户在 DropDownLis ...

随机推荐

  1. [HEOI 2013 day2] SAO (树形动态规划)

    题目大意 给一棵N个节点的有向树(N <= 1000),求其拓扑序列个数. 思路 我们将任意一个点作为根,用dp[i][j]表示以节点i为根的子树满足节点i在第j个位置上的拓扑序列的个数.在求节 ...

  2. Maven--多模块依赖实例解析(五)

    <Maven--搭建开发环境(一)> <Maven--构建企业级仓库(二)> <Maven—几个需要补充的问题(三)> <Maven—生命周期和插件(四)&g ...

  3. (转)iOS7界面设计规范(2) - UI基础 - iOS应用解析

    今天再来一发,然后结束掉周六的忙碌,去吃零食,还有冰啤酒:其实现在打嗝还有小龙虾味儿呢. 第二篇更多的是从技术的角度对iOS界面组成原理进行了简单的解析,篇幅很短,可稍作了解:更多关于iOS开发入门的 ...

  4. STM32F051 IAP源代码分享

    STM32F051 IAP源代码分享 假设不懂IAP的请自己主动脑补或者怒戳这里 http://www.openedv.com/posts/list/11494.htm 然后STM32F051的IAP ...

  5. 在Ubuntu上下载、编译和安装Android最新内核源代码(Linux Kernel)

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6564592 在前一篇文章提到,从源代码树下载下 ...

  6. exec与xargs区别

    区别描述: 两者都是对符合条件的文件执行所给的Linux 命令,而不询问用户是否需要执行该命令. -exec:{}表示命令的参数即为所找到的文件,以:表示comman命令的结束.\是转义符,因为分号在 ...

  7. <经验杂谈>C#/.Net中xml的Serialization序列化与DeSerializetion反序列化

    1.先讲概念:.Net Framework提供了对应的System.Xml.Seriazliation.XmlSerializer负责把对象序列化到XML,和从XML中反序列化为对象.Serializ ...

  8. css画下图

    通常我看到这种效果,都是直接ps解决,但是不断重申性能的今天,显然不适应时代的需求啊! 今天看到群里有人问这种效果怎么做了,我在思考的时候,有人已经给出答案了: 我就测试了一下,发现确实可以实现,总结 ...

  9. IEquatable(T) interface in .Net

    原文:http://weblogs.asp.net/pawanmishra/iequatable-t-interface-in-net 泛型方法: public static bool AreEqua ...

  10. sharding的基本思想和理论上的切分策略

    本文着重介绍sharding的基本思想和理论上的切分策略,关于更加细致的实施策略和参考事例请参考我的另一篇博文:数据库分库分表(sharding)系列(一) 拆分实施策略和示例演示 一.基本思想 Sh ...