Korzystając z ASP.MVC nieodłącznym elementem jest przekazywanie danych pomiędzy kontrolerami a widokami. Przyjrzyjmy się więc jakie mechanizmy oferuje ASP.MVC.

Możemy w tym celu wykorzystać: ViewBag (ViewData), TempData, Session, mechanizm dołączania modelu.

Krótka charakterystyka

ViewBag (TempData)
ViewBag jest wrapperem na ViewData (ViewDataDictionary). ViewBag jest typem dynamicznym (wprowadzony od .NET 4.0), dzięki czemu pomijane jest statyczne sprawdzanie typów przez CLR. Można więc w wygodniejszy sposób dodawać kolejne elementy do ViewDataDictionary. Zasięg ViewBag sprowadza się do pojedynczego żądania. Obiekty pobierane przez ViewBag nie wymagają rzutowania.
  ViewBag.Object1 = "test";
  // to samo co
  ViewData["Object1"] = "test";
  
TempData
Dziedziczy po TempDataDictionary, która przechowuje dane w Session. Jednak zasięg TempData jest ograniczony do czasu pomiędzy żądaniami. Po każdym bowiem żądaniu TempData z poprzednimi wartościami jest czyszona. Dlatego TempData przeznaczony jest do przekazywania danych między kontrolerami.
Session
Stan sesji umożliwia przechowywanie danych niezależnie dla każdego użytkownika. Poszczególne sesje użytkowników są identyfikowane poprzez unikalny identyfikator sesji przechowywany w ciasteczku. Czas życia ustalony jest przez właściwość timeout elementu sessionState w web.config.
Informacja o cookie jest wysyłana w nagłówku żądania.
cookie1

cookie2
Dołączanie modelu
Mechanizm wykorzystywany do przekazywania danych z widoku do kontrolera. Dane są automatycznie dołączane do modelu na podstawie nazw z: parametrów żądania, pól formularza, danych JSON. Pozwala nie tylko na przekazywanie typów prostych ale i złożonych (wiązanie po nazwach właściwości).

Porównanie poszczególnych sposobów przekazywania danych między kontrolerami a widokami:

ViewBag TempData Session Dołączanie modelu
controller-controller
controller-view
view-controller