上海百维科技,上海网站建设 上海软件开发公司热线电话:021-57700304  
  首 页 产品与服务 软件定制 成功案例 思源优势 技术学院 关于我们 联系我们
 
 
思源软件学院 >>> 根目录>>.NET技术>>ASP.NET MVC >>>Asp.net MVC中的ViewData与ViewBag
不读书的人,思想就会停止。——谚语(上海网站建设)

Asp.net MVC中的ViewData与ViewBag


Admin
2012年1月21日

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

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<stringstring> stackholder = new Dictionary<stringstring>();
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<stringstring> )
{
<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<stringstring> stackholder = new Dictionary<stringstring>();
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<stringstring> stackholder = new Dictionary<stringstring>();
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<stringstring> )
{
<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<stringstring> stackholder = new Dictionary<stringstring>();
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开辟有帮助。



&#160;







作者:Petter Liu


出处:http://www.cnblogs.com/wintersun/


本文版权归作者和博客园共有,迎接转载,但未经作者赞成必须保存此段声明,且在文章页面明显地位给出原文连接,不然保存究查法令义务的权力。


该文章也同时公布在我的自力博客中-Petter Liu Blog。

 

上海软件开发公司业务部:黄浦区重庆北路211号602室 | 上海软件开发公司技术部:松江区天云路259号| 上海软件开发公司综合部:松江区南期昌路346弄50号401室
上海软件开发 Copyright © 2005-2010 All Rights Reserved 电话:021-57616508  传真:57661889
沪ICP备05011021号