在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. jQuery实现置顶和置底特效

    原文地址:http://www.jqueryba.com/3403.html <script src="jquery.min.js" type="text/java ...

  2. hdu2082:简单母函数

    题目大意: a,b,c,d...z这些字母的价值是1,2,3......26 给定 这26个字母分别的数量,求总价值不超过50的单词的数量 分析: 标准做法是构造母函数 把某个单词看作是,关于x的多项 ...

  3. 构建一个基于 Spring 的 RESTful Web Service

    本文详细介绍了基于Spring创建一个“hello world” RESTful web service工程的步骤. 目标 构建一个service,接收如下HTTP GET请求: http://loc ...

  4. 【转】打包AAC码流到FLV文件

    AAC编码后数据打包到FLV很简单.1. FLV音频Tag格式                              字节位置    意义0x08,                         ...

  5. [RxJS] Updating Data with Scan

    You often need to update the data flowing through the stream with custom logic based on what you nee ...

  6. 一个不错的PPT,扁平化设计,开放资源,要的进来

    开了那么多的博客,没做啥资源贡献,今天共享一个不错的PPT模板.例如以下图所看到的,须要的话留下邮箱 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGFp ...

  7. 『转载』Debussy快速上手(Verdi相似)

    『转载』Debussy快速上手(Verdi相似) Debussy 是NOVAS Software, Inc(思源科技)发展的HDL Debug & Analysis tool,这套软体主要不是 ...

  8. My way on Linux - 知识梳理计划

    知识梳理计划图 近期计划把自己学习的工作中用到的Linux知识梳理下,敬请期待.

  9. WPF DataGrid 之数据绑定--实例2

    1.前台Grid定义 <!--数据绑定--> <DataGrid Grid.Row="1" Name="gridOne" Margin=&qu ...

  10. Android黑科技,读取用户短信+修改系统短信数据库

    安卓系统比起ios系统最大的缺点,相信大家都知道,就是系统安全问题.这篇博客就秀一波“黑科技”. 读取用户短信 Android应用能读取用户手机上的短信,相信已经不是什么新鲜事,比如我们收到的短信验证 ...