ASP.NET-viewBag Viewdata Tempdata

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ASP.NET-viewBag Viewdata Tempdata相关的知识,希望对你有一定的参考价值。

ASP.NET MVC提供3种选择ViewData,ViewBag,TempData来从controller到View及后续请求传输数据。

ViewData和ViewBag很相似,而TempData有所不同。

让我们来讨论或总结三者的要点:

ViewBag 和 ViewData的区别:

  1. ViewData 是一个字典对象,从ViewDataDictionary 类继承,已string(字符串)作为键来访问对象。
  2. ViewBag 是一个动态属性,是c#4.0新增的优秀的动态特性。
  3. ViewData 需要进行数据类型转换,判断书否为null值来防止出错。

      4.ViewBag 不需要类型转换。

5.ViewBag和Viedata只能在一个action方法中使用,两个同名的aciton仍然是2个的意思,不算一个aciton方法

ViewBag & ViewData 的例子:

  1. public ActionResult Index()
  2. {
  3. ViewBag.Name = "Monjurul Habib";
  4. return View();
  5. }
  6. public ActionResult Index()
  7. {
  8. ViewData["Name"] = "Monjurul Habib";
  9. return View();
  10. }

  1. @ViewBag.Name
  2. @ViewData["Name"]

TempData:

这个好像是不同的Action函数中才能使用,要是同一个action函数中不能!

TempData也是一个字典类型,从TempDataDictionary类继承而来。存储在短暂的会话中。键 为string类型,值为object类型。

所不同的是对象的生命周期。TempData生命周期是一个http请求的时间。意思就是从一个页面跳转到另一个页面的时间。保持302/303的重新定向因为他们是在同一个请求中。

  1. public ActionResult Page()
  2. {
  3. TempData["v"] = "jingya";
  4. return View();
  5. }
  6. public ActionResult Rank()
  7. {
  8. return Content(TempData["v"].ToString());
  9. }

当你从一个control到另一个control或一个page到另一个page之间跳转的时候帮你保存数据。它内部使用了会话(session)机制。主要用在从一个页面跳到另外一个页面期间来存储数据。

需要进行数据类型转换,检查是否为null来规避错误。通常用于存储一个时间信息,错误信息或验证信息。

  1. public ActionResult Index()
  2. {
  3. ViewBag.name = TempData["name"];
  4. return View();
  5. }
  6. public ActionResult About()
  7. {
  8. ViewBag.Message = "Your application description page.";
  9. TempData["name"] = "jingya";
  10. return RedirectToAction("Index");
  11. }

最后一个机制就是Session,工作方式就像viewdata,字典类型等键值方式,键一般为string类型,值可以是object类型。这种方式,是把数据存储在客户端的cookie里,可以保存较长的一段时间。也需要进行行验证,但是没有安全保障。关于ViewData 和viewbag你需要在程序中较灵活的应运。因为每一个页面的动作都贯穿asp.net 整个生命周期。你可以在子页面中使用viewdata/viewbag,但是要细心,你是不是用它来填充无关的数据,会污染你的控制器。 




以上是关于ASP.NET-viewBag Viewdata Tempdata的主要内容,如果未能解决你的问题,请参考以下文章

ViewData 和 ViewBag 有啥区别?

简述viewdata,viewbag和tempdata的区别

ViewData 的替代品?

ViewData丶ViewBag和TempData

ViewData 始终为空

ViewData,ViewBag和TempData