Asp.net MVC中的ViewData与ViewBag

来源:互联网 发布:淘宝几毛钱的东西 编辑:程序博客网 时间:2024/05/16 14:52

转载:http://www.cnblogs.com/wintersun/archive/2012/01/21/2328563.html

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

ViewDataViewBag它是Key/Value字典集合它是dynamic类型对像从Asp.net MVC 1 就有了ASP.NET MVC3 才有基于Asp.net 3.5 framework基于Asp.net 4.0与.net frameworkViewData比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开发有帮助。

 

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 稳压器输出没电怎么办 稳压器不稳10压怎么办 dnf凯蒂不见了怎么办 马桶里掉进塑料瓶盖怎么办 塑料瓶子盖子打不开怎么办 按压瓶盖坏了怎么办 瓶盖拧错位了怎么办 红酒盖子开不了怎么办 胶盖罐头打不开怎么办 玻璃瓶的塑料盖打不开怎么办 香水按压不出来怎么办 电高压锅盖子打不开怎么办 杯子螺口错位怎么办 散粉盖子扭不开怎么办 玻璃瓶饮料盖子打不开怎么办 玻璃瓶玻璃盖子打不开怎么办 美甲没有胶水怎么办 按压式瓶盖打不开怎么办 睫毛胶水瓶盖打不开怎么办 玻璃杯盖子滑丝怎么办 瓶盖滑扣了怎么办 胶水瓶口被塞住怎么办 美林盖子打不开怎么办 美林瓶盖打不开怎么办 泰诺瓶盖打不开怎么办 玻璃罐头瓶盖打不开怎么办 塑料罐头瓶盖打不开怎么办 喷笔壶盖打不开怎么办 陶瓷壶盖卡住了怎么办 贝德玛瓶盖摔坏怎么办 塑料盖子错位拧不开怎么办 安全瓶盖坏了怎么办 刚买面霜打不开怎么办 可乐瓶盖鼓起来怎么办 暖壶塞子吸住了怎么办 茶兀瓶盖打不开怎么办 水杯盖太紧了拧不开怎么办 矿泉水瓶盖拧不开了怎么办 弩弦用手拉不上怎么办 茅台酒瓶口漏酒怎么办 化妆品盖子丢了怎么办