ViewData VS ViewBag Vs TempData in MVC

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(“Jignesh”);

      Student.Add(“Tejas”);

      Student.Add(“Rakesh”);

 

      ViewData[“Student”] = Student;

      return View();

}

//page code

<ul>

    <% foreach (var student in ViewData[“Student”] as List<string>)

        { %>

    <li><%: student%></li>

    <% } %>

</ul>

ViewBag Example

 

//Controller Code

public ActionResult Index()

{

      List<string> Student = new List<string>();

      Student.Add(“Jignesh”);

      Student.Add(“Tejas”);

      Student.Add(“Rakesh”);

 

      ViewBag.Student = Student;

      return View();

//page code

<ul>

    <% foreach (var student in ViewBag.Student)

        { %>

    <li><%: student%></li>

    <% } %>

</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(“Jignesh”);

    Student.Add(“Tejas”);

    Student.Add(“Rakesh”);

 

    TempData[“Student”] = Student;

    return View();

}

//page code

<ul>

    <% foreach (var student in TempData[“Student”] as List<string>)

        { %>

    <li><%: student%></li>

    <% } %>

</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 subseque
nt request


Conclusion

We have three options ViewData, ViewBag and TeampData for passing data from controller to view and in next request. ViewData and ViewBag are almost similar and it helps us to transfer the data from controller to view whereas TempData is also work during the current and subsequent request.

via: http://www.c-sharpcorner.com/Blogs/12427/viewdata-vs-viewbag-vs-tempdata-in-mvc.aspx