Skip to main content

ViewData, ViewBag and TempData in MVC


ViewData, ViewBag and TempData in MVC explained


ViewBag and ViewData are used to pass the data from Controller action to View and TempData is used to pass the data from action to another action or one Controller to another Controller.

ViewData and ViewBag are used for the same purpose that is, to transfer data from controller to view.  ViewData is nothing but a dictionary of objects and it is accessible by string as key. ViewData is a property of controller that exposes an instance of the 

ViewDataDictionary class. ViewBag is very similar to ViewData, but ViewBag is a dynamic property (dynamic keyword 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 converting it to strongly typed. ViewBag is just a wrapper around the ViewData.

ViewData

1.       ViewData is derived from the ViewDataDictionary class and is basically a Dictionary object i.e. Keys and Values where Keys are String while Values will be objects.
2.       Data is stored as Object in ViewData.
3.       We need to cast data back to its original type since the data is stored as object in ViewData. Also it required NULL checking while retrieving.
4.       ViewData is used for passing value from Controller to View.
5.       ViewData is available only for Current Request. It will be destroyed on redirection.

Example

In the example that follows, a string value is set in the ViewData object in Controller and it is then displayed in View.


Controller

public class CsharpnaijaController : Controller
{
    // GET: Csharpnaija
    public ActionResult Index()
    {
        ViewData["Message"] = "C# Naija, Hello!";
        return View();
    }
}

View

<html>
<head>
    <meta name="viewport" content="width=device-width"/>
    <title>Index</title>
</head>
<body>
    <div>
        @ViewData["Message"]
    </div>
</body>
</html>

ViewBag

ViewBag is a dynamic object to pass the data from Controller to View. And, this will pass the data as a property of object ViewBag. And we have no need to typecast to read the data or for null checking. The scope of ViewBag is permitted to the current request and the value of ViewBag will become null while redirecting.

Example

Controller

public class CsharpnaijaController : Controller
{
    // GET: First
    public ActionResult Index()
    {
        ViewBag.Message = "C# Naija, Hello";
        return View();
    }
}

View

<html>
<head>
    <meta name="viewport" content="width=device-width"/>
    <title>Index</title>
</head>
<body>
    <div>
        @ViewBag.Message
    </div>
</body>
</html>

TempData

TempData is a dictionary object to pass data from one action to other action in the same Controller or different Controller. Usually, TempData object will be stored in a session object. Tempdata is also required to typecast and null check before reading data from it. TempData scope is limited to the next request and if we want Tempdata to be available even further, we should use Keep and peek.

Example

In the following example, a string value is set in the TempData object in Controller and it is redirected to another Controller and finally displayed in View.

Employee Controller

public class  EmployeeController : Controller
{
    // GET: Employee
    public ActionResult Index()
    {
        TempData["Message"] = "Hello, C# Naija ";
        return new RedirectResult(@"~\Department\");
    }
}

Department Controller


public class DepartmentController : Controller
{
    // GET: Department
    public ActionResult Index()
    {
        return View();
    }
}

View of Department Controller


<html>
<head>
    <meta name="viewport" content="width=device-width"/>
    <title>Index</title>
</head>
<body>
    <div>
        @TempData["Message"];
    </div>
</body>
</html>

I hope this article helped you understand, the concept of ViewData, ViewBag and TempData.

This article referenced the work of Mudassar Khan, SATISH KUMAR and JIGNESHTRIVEDI



Comments

Popular posts from this blog

Collections in C#

Collections in C# In our previous article , we have learned about how we can use arrays in C#. Arrays in programming are used to group a set of related objects. So one could create an array or a set of Integers, which could be accessed via one variable name. What is Collections in C#? Collections are similar to Arrays, it provides a more flexible way of working with a group of objects. In arrays, you would have noticed that you need to define the number of elements in an array beforehand. This had to be done when the array was declared. But in a collection, you don't need to define the size of the collection beforehand. You can add elements or even remove elements from the collection at any point of time. This article will focus on how we can work with the different collections available in C#. There are three distinct collection types in C#: standard generic concurrent The standard collections are found under the System.Collections. They do not store elemen...

The String.Join Method in C# Explained

The String.Join Method in C#   The string.Join concatenates the elements of a specified array or the members of a collection, using the specified separator between each element or member. Overloads of string.Join Method Description Join(Char, Object[]) Concatenates the string representations of an array of objects, using the specified separator between each member. Join(Char, String[]) Concatenates an array of strings, using the specified separator between each member. Join(String, IEnumerable<String>) Concatenates the members of a constructed IEnumerable<T> collection of type String, using the specified separator between each member. Join(String, Object[]) Concatenates the elements of an object array, using the specified separator between each element. Join(String, String[]) Concatenates all the elements of a string array, usi...

System.IO Namesapce in C#

  System.IO Namesapce in C# A  file  is a collection of data stored in a disk with a specific name and a directory path. When a file is opened for reading or writing, it becomes a  stream . The stream is basically the sequence of bytes passing through the communication path. There are two main streams: the  input stream  and the  output stream . The  input stream  is used for reading data from file (read operation) and the  output stream  is used for writing into the file (write operation). From the above definition of file, the C# provides a namespace that enable us to manipulate file in C# called System.IO.   System.IO  is a  namespace  and it contains a standard IO (input/output) types such as classes , structures , enumerations , and  delegates  to perform a read/write operations on different sources like file, memory, network, etc.   System.IO Classes The table below shows differen...