Passing Data to Views
There are three different ways in which data can be passed to a view by using the ViewDataDictionary, the ViewBag, and strongly typed views.
ViewDataDictionary
public ViewResult Show(int id)
{
var entry = _db.Entries.Find(id);
bool hasPermission = User.Identity.Name == entry.Name;
ViewData["hasPermission"] = hasPermission;
return View(entry);
}
In the view, we extract the hasPermission information from ViewData, but we need a cast:
<p>
@{
bool hasPermission =
(bool)ViewData["hasPermission"];
}
</p>
ViewBag
ViewBag provides a way to pass data from the controller to the view, but the ViewBag makes use of the dynamic language features of C# 4. Instead of storing items in a dictionary using a string key, you can simply set properties on the dynamic ViewBag property within your controller:
ViewBag.HasPermission = hasPermission;
<p>
@if (ViewBag.HasPermission)
{
}
</p>
Strongly typed views with a view model
In controller:
public ActionResult Index()
{
var mostRecentEntries =
(from entry in m_guestbookContext.Entries
orderby entry.DateAdded descending
select entry).Take(20);
return View(mostRecentEntries.ToList()); // Passed data to view, View method encapsulates setting the ViewData.Model property
}
In view:
@using Guestbook.Models
@model List<GuestbookEntry>