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
Post a Comment