Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 234|回复: 0

[默认分类] Asp.net MVC中的ViewData与ViewBag

[复制链接]
  • TA的每日心情
    开心
    2021-12-13 21:45
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    发表于 2018-7-9 21:17:37 | 显示全部楼层 |阅读模式
    在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:
    1. public ActionResult UsingViewData(){
    2.    
    3.     ViewData["Title"] = " Using ViewData";
    4.     ViewData["ProjectName"] = "My Test Project";
    5.     ViewData["ProjectDescription"] = "This is Test Project to demo Viewdata and viewbag details";
    6.     ViewData["StartDate"] = new DateTime(2011, 1, 1);
    7.     ViewData["TotalPrice"] = 1000;
    8.     ViewData["TotalDays"] = 100;
    9.     Dictionary<string, string> stackholder = new Dictionary<string, string>();
    10.     stackholder.Add("Client","Mr.  Client");
    11.     stackholder.Add("Manager","Mr. Joy");
    12.     stackholder.Add("Team Leader","Mr.Toy");
    13.     stackholder.Add("Sr. developer", "Mr.dojoy");
    14.     stackholder.Add("developer", "Mr. nodoy");
    15.     ViewData["stackholder"] = stackholder;
    16.     List<string> modules = new List<string>();
    17.     modules.Add("Admin module");
    18.     modules.Add("ShoppingCart module");
    19.     modules.Add("CMS module");
    20.     ViewData["modules"] = modules;
    21.     return View();
    22. }
    复制代码

    对应UsingViewData View的csHTML:
    1. <h1>@ViewData["Title"]</h1>
    2. <div>
    3.    <div>
    4.     <h2>Project Name : @ViewData["ProjectName"]</h2>
    5.    </div>
    6.    <div>
    7.      ProjectDescription :   
    8.      <p>"@ViewData["ProjectDescription"]".</p>
    9.    </div>
    10.    <div>
    11.       Stack Holder :
    12.       <br />
    13.       <ul id="stakholder">
    14.       @foreach ( var stakerholder in ViewData["stackholder"] as Dictionary<string, string> )
    15.       {         
    16.     <li>
    17.         @stakerholder.Key   : @stakerholder.Value
    18.     </li>
    19.       }
    20.      </ul>
    21.    </div>
    22.    <div>
    23.      Project Details:<br />
    24.      <div>
    25.        module List  :
    26.        <ul id="modulelist">
    27.       @foreach ( var module in ViewData["modules"] as List<string> )
    28.       {         
    29.     <li>
    30.         @module
    31.     </li>
    32.       }
    33.      </ul>
    34.         
    35.      </div>
    36.      Project StartDate : @ViewData["StartDate"]  <br />
    37.      Project TotalPrice: @ViewData["TotalPrice"] <br />
    38.      Project TotaDays  : @ViewData["TotalDays"]
    39.    </div>
    40. </div>
    复制代码

    然后是ViewBag:
    1. public ActionResult UsingViewBag()
    2. {
    3.     ViewBag.Title = " Using ViewBag";
    4.     ViewBag.ProjectName = "My Test Project";
    5.     ViewBag.ProjectDescription = "This is Test Project to demo Viewdata and viewbag details";
    6.     ViewBag.StartDate = new DateTime(2011, 1, 1);
    7.     ViewBag.TotalPrice = 1000;
    8.     ViewBag.TotalDays = 100;
    9.     Dictionary<string, string> stackholder = new Dictionary<string, string>();
    10.     stackholder.Add("Client", "Mr.  Client");
    11.     stackholder.Add("Manager", "Mr. Joy");
    12.     stackholder.Add("Team Leader", "Mr.Toy");
    13.     stackholder.Add("Sr. developer", "Mr.dojoy");
    14.     stackholder.Add("developer", "Mr. nodoy");
    15.     ViewBag.stackholder = stackholder;
    16.     List<string> modules = new List<string>();
    17.     modules.Add("Admin module");
    18.     modules.Add("ShoppingCart module");
    19.     modules.Add("CMS module");
    20.     ViewBag.modules = modules;
    21.     return View();
    22. }
    复制代码

    对应View UsingViewBag 的cshtml的ViewBag:
    1. <h1>@ViewBag.Title</h1>
    2. <div>
    3.    <div>
    4.     <h2>Project Name : @ViewBag.ProjectName</h2>
    5.    </div>
    6.    <div>
    7.      ProjectDescription :   
    8.      <p>"@ViewBag.ProjectDescription.</p>
    9.    </div>
    10.    <div>
    11.       Stack Holder :
    12.       <br />
    13.       <ul id="stakholder">
    14.       @foreach ( var stakerholder in ViewBag.stackholder )
    15.       {         
    16.     <li>
    17.         @stakerholder.Key   : @stakerholder.Value
    18.     </li>
    19.       }
    20.      </ul>
    21.    </div>
    22.    <div>
    23.      Project Details:<br />
    24.      <div>
    25.        module List  :
    26.        <ul id="modulelist">
    27.       @foreach ( var module in ViewBag.modules )
    28.       {         
    29.     <li>
    30.         @module
    31.     </li>
    32.       }
    33.      </ul>
    34.         
    35.      </div>
    36.      Project StartDate : @ViewBag.StartDate.ToString("dd-MMM-yyyy") <br />
    37.      Project TotalPrice: @ViewBag.TotalPrice  ₹  <br />
    38.      Project TotaDays  : @ViewBag.TotalDays
    39.    </div>
    40. </div>
    复制代码

    后面是在Controller中使用ViewBag:
    1. public ActionResult UsingViewBagInControlAndViewDataInView()
    2. {
    3.     ViewBag.Title = " Using ViewBag In Control And ViewData In View";
    4.     ViewBag.ProjectName = "My Test Project";
    5.     ViewBag.ProjectDescription = "This is Test Project to demo Viewdata and viewbag details";
    6.     ViewBag.StartDate = new DateTime(2011, 1, 1);
    7.     ViewBag.TotalPrice = 1000;
    8.     ViewBag.TotalDays = 100;
    9.     Dictionary<string, string> stackholder = new Dictionary<string, string>();
    10.     stackholder.Add("Client", "Mr.  Client");
    11.     stackholder.Add("Manager", "Mr. Joy");
    12.     stackholder.Add("Team Leader", "Mr.Toy");
    13.     stackholder.Add("Sr. developer", "Mr.dojoy");
    14.     stackholder.Add("developer", "Mr. nodoy");
    15.     ViewBag.stackholder = stackholder;
    16.     List<string> modules = new List<string>();
    17.     modules.Add("Admin module");
    18.     modules.Add("ShoppingCart module");
    19.     modules.Add("CMS module");
    20.     ViewBag.modules = modules;
    21.     return View();
    22. }
    复制代码

    在UsingViewBagInControlAndViewDataInView.cshtml中使用ViewData来取值:
    1. <h1>@ViewData["Title"]</h1>
    2. <div>
    3.    <div>
    4.     <h2>Project Name : @ViewData["ProjectName"]</h2>
    5.    </div>
    6.    <div>
    7.      ProjectDescription :   
    8.      <p>"@ViewData["ProjectDescription"]".</p>
    9.    </div>
    10.    <div>
    11.       Stack Holder :
    12.       <br />
    13.       <ul id="stakholder">
    14.       @foreach ( var stakerholder in ViewData["stackholder"] as Dictionary<string, string> )
    15.       {         
    16.     <li>
    17.         @stakerholder.Key   : @stakerholder.Value
    18.     </li>
    19.       }
    20.      </ul>
    21.    </div>
    22.    <div>
    23.      Project Details:<br />
    24.      <div>
    25.        module List  :
    26.        <ul id="modulelist">
    27.       @foreach ( var module in ViewData["modules"] as List<string> )
    28.       {         
    29.     <li>
    30.         @module
    31.     </li>
    32.       }
    33.      </ul>
    34.         
    35.      </div>
    36.      Project StartDate : @ViewData["StartDate"]  <br />
    37.      Project TotalPrice: @ViewData["TotalPrice"] <br />
    38.      Project TotaDays  : @ViewData["TotalDays"]
    39.    </div>
    40. </div>
    复制代码

    反过来是这样的:
    1. public ActionResult UsingViewDataInControlAndViewBagInView()
    2. {
    3.     ViewData["Title"] = " Using ViewData In Control And ViewBag In View";
    4.     ViewData["ProjectName"] = "My Test Project";
    5.     ViewData["ProjectDescription"] = "This is Test Project to demo Viewdata and viewbag details";
    6.     ViewData["StartDate"] = new DateTime(2011, 1, 1);
    7.     ViewData["TotalPrice"] = 1000;
    8.     ViewData["TotalDays"] = 100;
    9.     Dictionary<string, string> stackholder = new Dictionary<string, string>();
    10.     stackholder.Add("Client", "Mr.  Client");
    11.     stackholder.Add("Manager", "Mr. Joy");
    12.     stackholder.Add("Team Leader", "Mr.Toy");
    13.     stackholder.Add("Sr. developer", "Mr.dojoy");
    14.     stackholder.Add("developer", "Mr. nodoy");
    15.     ViewData["stackholder"] = stackholder;
    16.     List<string> modules = new List<string>();
    17.     modules.Add("Admin module");
    18.     modules.Add("ShoppingCart module");
    19.     modules.Add("CMS module");
    20.     ViewData["modules"] = modules;
    21.     return View();
    22. }
    复制代码

    在UsingViewDataInControlAndViewBagInView.cshtml 的View中使用ViewBag来取值:
    1. <h1>@ViewBag.Title</h1>
    2. <div>
    3.    <div>
    4.     <h2>Project Name : @ViewBag.ProjectName</h2>
    5.    </div>
    6.    <div>
    7.      ProjectDescription :   
    8.      <p>"@ViewBag.ProjectDescription.</p>
    9.    </div>
    10.    <div>
    11.       Stack Holder :
    12.       <br />
    13.       <ul id="stakholder">
    14.       @foreach ( var stakerholder in ViewBag.stackholder )
    15.       {         
    16.     <li>
    17.         @stakerholder.Key   : @stakerholder.Value
    18.     </li>
    19.       }
    20.      </ul>
    21.    </div>
    22.    <div>
    23.      Project Details:<br />
    24.      <div>
    25.        module List  :
    26.        <ul id="modulelist">
    27.       @foreach ( var module in ViewBag.modules )
    28.       {         
    29.     <li>
    30.         @module
    31.     </li>
    32.       }
    33.      </ul>
    34.         
    35.      </div>
    36.      Project StartDate : @ViewBag.StartDate.ToString("dd-MMM-yyyy") <br />
    37.      Project TotalPrice: @ViewBag.TotalPrice  ₹  <br />
    38.      Project TotaDays  : @ViewBag.TotalDays
    39.    </div>
    40. </div>
    复制代码

    这样对比看上去会比较清楚一些。在源代码中的ViewBag是这样的属性:
    1. public dynamic ViewBag {
    2.     get {
    3.         if (_dynamicViewData == null) {
    4.             _dynamicViewData = new DynamicViewDataDictionary(() => ViewData);
    5.         }
    6.         return _dynamicViewData;
    7.     }
    8. }
    复制代码
    ViewData是:
    1. public ViewDataDictionary ViewData {
    2.     get {
    3.         if (_viewData == null) {
    4.             SetViewData(new ViewDataDictionary());
    5.         }
    6.         return _viewData;
    7.     }
    8.     set {
    9.         SetViewData(value);
    10.     }
    11. }
    复制代码
    具体细节在这儿不深入了,这里只是抛砖引玉。希望对您Asp.net MVC开发有帮助。



    作者:Petter Liu
    出处:http://www.cnblogs.com/wintersun/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
    该文章也同时发布在我的独立博客中-Petter Liu Blog
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-15 07:18 , Processed in 0.310719 second(s), 37 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表