标签:
转载原地址 http://www.cnblogs.com/sunshineground/p/4350216.html
在ASP.NET MVC中,页面间Controller与View之间主要有以下几种小量数据的传值方式:ViewData、ViewBag、TempData和Session变量。
下面就这四种传值方式做出详细介绍。
一、ViewData
下面我们来看一个简单的例子,演示一下如何使用ViewData来从Controller向View传值。
1 public ActionView Index() 2 { 3 ViewData["Message"] = "This is a message from ViewData."; 4 5 return View(); 6 }
然后我们在视图中使用这个变量:
1 <div> 2 @ViewData["message"].ToString() 3 </div>
综上,ViewData更适合从Controller向View传递简单对象数据时使用。
二、ViewBag
同样,我们来通过一个简单的例子来演示一下如何利用ViewBag从Controller向View传递数据。
1 public ActionView Index() 2 { 3 ViewBag.Message = "This is a message from ViewBag."; 4 5 return View(); 6 }
然后我们在视图中取出数据并显示:
1 <div> 2 @ViewBag.Message 3 </div>
综上,ViewBag更适合从Conroller向View传递复杂数据时使用,因为取出存储在其中的数据变量时无需进行类型转换。
三、ViewData和ViewBag的区别和联系
1.ViewData和ViewBag其实是一回事,ViewBag其实是对ViewData的封装,其内部其实是使用ViewData实现内部存储的。
2.唯一的不同点是,ViewBag可以存储动态类型的变量值(dynamic),它会在程序运行的时候动态解析,而ViewData只能存储String Key/Object Value字典数组。
ViewData中的变量为Object类型,而ViewBag中的变量时dynamic类型,他们的区别是,dynamic类型在使用时会自动根据数据类型转换,而ViewData中的变量值则需要我们进行强制转换。
3.通过转到定义我们可以看到:
1 [Dynamic] 2 public dynamic ViewBag { get; } 3 public ViewDataDictionary ViewData { get; set; }
这里ViewBag只有get方法,没有set方法。
4.ViewData比ViewBag读取速度快。
四、TempData
下面,我们来透过一个例子来演示一下如何在两个Action方法中传递数据。
首先创建一个Model类,如下
1 public class Customer 2 { 3 public int Id { get; set; } 4 public string Code { get; set; } 5 public double Amount { get; set; } 6 }
然后在Controller中加入如下代码:
1 public ActionView DisplayCustomer1 2 { 3 Customer customer = new Customer 4 { 5 Id = 1001, 6 Code = "100101", 7 Amount = 100 8 }; 9 10 TempData["Customer"] = customer; 11 12 return RedictToAction("DisplayCustomer2"); 13 }
public ActionView DisplayCustomer2 { Customer customer = TempData["OneCustomer"] as Customer; return View(customer ); }
最后创建一个强类型的视图来显示客户信息,此处代码略。
综上,TempData主要是用在需要在多个Acions或者页面重定向时共享传递数据时使用。
五、Session
我们仍然使用上面的例子,假如我们不用TempData,而用Session也可以得到同样的结果。
1 public AcionView DisplayCustomer1 2 { 3 Customer customer = new Customer 4 { 5 Id = 1001, 6 Code = "10011", 7 Amount = 100 8 }; 9 10 Session["OneCustomer"] = customer; 11 12 return RedictToAction("DisplayCustomer2"); 13 } 14 15 public ActionResult DisplayCustomer2 16 { 17 Customer customer = Session["OneCustomer"] as Customer; 18 19 return View(customer); 20 }
Session的生命周期最长,但是它默认的是使用Cookies来存储数据,所以使用的时候必须注意数据保密的问题。
综上,Session主要在需要多个Controllers, Actions and Views共享数据(非敏感数据)时使用。
六、图说传递数据的生命周期
Maintains data between | ViewData/ViewBag | TempData | Session |
Controller to Controller | No | Yes | Yes |
Controller to View | Yes | Yes | Yes |
View to Contorller | No | No | Yes |
ASP.NET MVC程序传值方式:ViewData,ViewBag,TempData和Session
标签:
原文地址:http://www.cnblogs.com/wphl-27/p/5956020.html