Click here to Skip to main content
15,861,125 members
Articles / Web Development / ASP.NET / ASP.NET4.0

What is ViewData, ViewBag and TempData? – MVC Options for Passing Data Between Current and Subsequent Request

Rate me:
Please Sign up or sign in to vote.
4.76/5 (148 votes)
15 Oct 2012CPOL2 min read 1.1M   110   60
What is ViewData, ViewBag and TempData?

ASP.NET MVC offers us three options - ViewData, ViewBag and TempData for passing data from controller to view and in next request. ViewData and ViewBag are almost similar and TempData performs additional responsibility. Let's discuss or get key points on those three objects:

Similarities between ViewBag & ViewData:

  1. Helps to maintain data when you move from controller to view.
  2. Used to pass data from controller to corresponding view.
  3. Short life means value becomes null when redirection occurs. This is because their goal is to provide a way to communicate between controllers and views. It’s a communication mechanism within the server call.

Difference between ViewBag & ViewData:

  1. ViewData is a dictionary of objects that is derived from ViewDataDictionary class and is accessible using strings as keys.
  2. ViewBag is a dynamic property that takes advantage of the new dynamic features in C# 4.0.
  3. ViewData requires typecasting for complex data type and check for null values to avoid error.
  4. ViewBag doesn’t require typecasting for complex data type.

ViewBag & ViewData Example:

C#
public ActionResult Index()
{
    ViewBag.Name = "Monjurul Habib";
    return View();
}
C#
public ActionResult Index()
{
    ViewData["Name"] = "Monjurul Habib";
    return View();
} 

In View:

C#
@ViewBag.Name 
@ViewData["Name"] 

TempData:

TempData is also a dictionary derived from TempDataDictionary class and stored in short lives session and it is a string key and object value. The difference is the life cycle of the object. TempData keeps the information for the time of an HTTP Request. This mean only from one page to another. This also works with a 302/303 redirection because it’s in the same HTTP Request. It helps to maintain data when you move from one controller to other controller or from one action to other action. In other words, when you redirect, “Tempdata” helps to maintain data between those redirects. It internally uses session variables. Temp data use during the current and subsequent request only means it is used when you are sure that next request will be redirecting to next view. It requires typecasting for complex data type and check for null values to avoid error. It is generally used to store only one time messages like error messages, validation messages.

C#
public ActionResult Index()
{
  var model = new Review()
            {
                Body = "Start",
                Rating=5
            };
    TempData["ModelName"] = model;
    return RedirectToAction("About");
}
C#
public ActionResult About() 
{     
    var model= TempData["ModelName"];     
    return View(model); 
} 

The last mechanism is the Session which works like the ViewData, like a Dictionary that takes a string for key and object for value. This one is stored into the client Cookie and can be used for a much more long time. It also needs more verification to never have any confidential information. Regarding ViewData or ViewBag, you should use it intelligently for application performance. Because each action goes through the whole life cycle of regular ASP.NET MVC request. You can use ViewData/ViewBag in your child action, but be careful that you are not using it to populate the unrelated data which can pollute your controller.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Software Developer (Senior)
Singapore Singapore
A life-long-learner, maker and soft music fan. Likes building things to solve problems. Years of successful records serving mid and large scale .NET applications in domestic and international client environment. Expertise in different areas of software development life cycles and Software Architecture.

Always looks for new technology and loves to get hands dirty Smile | :)

Comments and Discussions

 
QuestionShort and neat! Pin
Sharath C V28-Jan-18 15:16
professionalSharath C V28-Jan-18 15:16 
GeneralThank You! Pin
Priyu Kale18-Jan-18 19:14
Priyu Kale18-Jan-18 19:14 
QuestionNice Article : TempData Explanation is quite easy to understand Pin
Vikas Thombre28-Dec-17 21:35
Vikas Thombre28-Dec-17 21:35 
Praisegood,but could have made it better Pin
VinayR@J13-Mar-16 20:10
professionalVinayR@J13-Mar-16 20:10 
QuestionCovered short and complete topic Pin
Meer Wajeed Ali14-Dec-15 22:07
professionalMeer Wajeed Ali14-Dec-15 22:07 
Generalthanks indeed very good article and example Pin
Member 474497728-Dec-14 2:13
Member 474497728-Dec-14 2:13 
General[My vote of 2] TempData explanation misleading Pin
Ranisz20-Oct-14 17:35
Ranisz20-Oct-14 17:35 
GeneralMy vote of 3 Pin
bansalVks10-Aug-14 21:05
bansalVks10-Aug-14 21:05 
QuestionVote Pin
Member 809692630-Jul-14 4:51
Member 809692630-Jul-14 4:51 
GeneralMy vote of 4 Pin
Manoj B. Kalla21-Jul-14 19:15
Manoj B. Kalla21-Jul-14 19:15 
GeneralMy vote of 3 Pin
Ali Murad25-May-14 21:23
Ali Murad25-May-14 21:23 
GeneralMy vote of 2 Pin
Andrija Juric23-Apr-14 23:01
Andrija Juric23-Apr-14 23:01 
GeneralMy vote of 5 Pin
Pham Hong Sang11-Apr-14 16:02
Pham Hong Sang11-Apr-14 16:02 
GeneralThanks Pin
Md.Mithun20-Feb-14 21:56
Md.Mithun20-Feb-14 21:56 
NewsSomeone has copied your code Pin
Subhadeep Mitra27-Jan-14 19:33
Subhadeep Mitra27-Jan-14 19:33 
GeneralRe: Someone has copied your code Pin
Bhanu Chhabra7-May-15 21:29
Bhanu Chhabra7-May-15 21:29 
QuestionWhy do these exist? Pin
Member 80474894-Dec-13 3:37
Member 80474894-Dec-13 3:37 
QuestionWhat is an HTTP Request? Pin
Colin Angus Mackay2-Dec-13 23:19
Colin Angus Mackay2-Dec-13 23:19 
AnswerRe: What is an HTTP Request? Pin
Saineshwar Bageri9-Apr-14 20:44
Saineshwar Bageri9-Apr-14 20:44 
C#
void Keep()

Calling this method with in the current action ensures that all the items in TempData are not removed at the end of the current request
 

    <a href="/Members/model">@model</a> MyProject.Models.EmpModel;
    @{
    Layout = "~/Views/Shared/_Layout.cshtml";
    ViewBag.Title = "About";
    var tempDataEmployeet = TempData["emp"] as Employee; //need typcasting
    TempData.Keep(); // retains all strings values
    } 


void Keep(string key)

Calling this method with in the current action ensures that specific item in TempData is not removed at the end of the current request.

    <a href="/Members/model">@model</a> MyProject.Models.EmpModel;
    @{
    Layout = "~/Views/Shared/_Layout.cshtml";
    ViewBag.Title = "About";
    var tempDataEmployeet = TempData["emp"] as Employee; //need typcasting
    TempData.Keep("emp"); // retains only "emp" string values
    }

GeneralUsing Session["myThing"] Pin
Roger Tranchez23-Oct-13 2:30
Roger Tranchez23-Oct-13 2:30 
Questionthanks, not explained everywhere Pin
Member 1030591229-Sep-13 21:25
Member 1030591229-Sep-13 21:25 
Question[My vote of 2] Session is not stored in a cookie Pin
morzel20-Sep-13 5:10
morzel20-Sep-13 5:10 
QuestionScope of ViewData and ViewBag and TempData Pin
Antariksh Verma15-Sep-13 20:54
professionalAntariksh Verma15-Sep-13 20:54 
AnswerRe: Scope of ViewData and ViewBag and TempData Pin
Imran Abdul Ghani9-Jul-14 20:26
Imran Abdul Ghani9-Jul-14 20:26 
GeneralMy vote of 5 Pin
Member 1022250121-Aug-13 23:07
Member 1022250121-Aug-13 23:07 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.