Monday 11 August 2014

ViewData vs ViewBag vs TempData vs Session

Introduction

ViewData and ViewBag are used for the same purpose to transfer data from controller to view. Both life lies only in current request. ViewData is nothing but dictionary of object and it is accessible by string as key. ViewData is property of controller that exposes an instance of the ViewDataDictionary class. ViewBag is very similar to ViewData. ViewBag is a dynamic property (dynamic keyword which is introduced in .net framework 4.0). ViewBag is able to set and get value dynamically and able to add any number of additional fields without converts it to strongly typed. ViewBag is just a wrapper around the ViewData.

ViewData Example
//Controller Code
public ActionResult Index()
{
      List<string> Student = new List<string>();
      Student.Add("Vineet");
      Student.Add("Buddhi");
      Student.Add("Rakesh");

      ViewData["Student"] = Student;
      return View();
}
//page code
<ul>
@foreach (var student in ViewData["Student"] as List<string>)
{
@student
}
</ul>

ViewBag Example

//Controller Code
public ActionResult Index()
{
      List<string> Student = new List<string>();
      Student.Add("Vineet");
      Student.Add("Buddhi");
      Student.Add("Rakesh");

      ViewBag.Student = Student;
      return View();
//page code
<ul>
@foreach (var student in ViewData["Student"] as List<string>)
{
@student
}
</ul>

TempData is a dictionary which is derived from TempDataDictionary class. TempData is stored data just like live session for short time. TempData Keep data for the time of HTTP Request it mean that it hold data between two consecutive requests. TempData help us to transfer data between controllers or between actions. TempData internally use Session variables. Note that TempData is only work during the current and subsequent request. It is generally used to store one time message. With the help of TempData.Keep() method we can keep value in TempData object after request completion.

TempData Example
 
//Controller Code
public ActionResult Index()
{
    List<string> Student = new List<string>();
    Student.Add("Buddhi");
    Student.Add("Vineet");
    Student.Add("Rakesh");

    TempData["Student"] = Student;
    return View();
}
//page code
<ul>
@foreach (var student in ViewData["Student"] as List<string>)
{
@student
}
</ul>

ViewData VS ViewBag VS TempData
 
ViewData
ViewBag
TempData
It is Key-Value Dictionary collection
It is a type object
It is Key-Value Dictionary collection
ViewData is a dictionary object and it is property of ControllerBase class
ViewBag is Dynamic property of ControllerBase class.
TempData is a dictionary object and it is property of controllerBase class.
ViewData is Faster than ViewBag
ViewBag is slower than ViewData
NA
ViewData is introduced in MVC 1.0 and available in MVC 1.0 and above
ViewBag is introduced in MVC 3.0 and available in MVC 3.0 and above
TempData is also introduced in MVC1.0 and available in MVC 1.0 and above.
ViewData  is also work with .net framework 3.5 and above
ViewBag  is only  work with .net framework 4.0 and above
TempData  is also work with .net framework 3.5 and above
Type Conversion code is required while enumerating
In depth, ViewBag is used dynamic, so there is no need to type conversion while enumerating.
Type Conversion code is required while enumerating
It value become null if redirection is occurred.
Same as ViewData
TempData is used to pass data between two consecutive requests.
It lies only during the current request.
Same as ViewData
TempData is only work during the current and subsequent request

No comments :