TA的每日心情 | 开心 2021-12-13 21:45 |
---|
签到天数: 15 天 [LV.4]偶尔看看III
|
在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<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 : @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 : @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 : @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 : @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开发有帮助。
作者:Petter Liu
出处:http://www.cnblogs.com/wintersun/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
该文章也同时发布在我的独立博客中-Petter Liu Blog。 |
|