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.
- 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.
- 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).
ViewBag.Object1 = "test"; // to samo co ViewData["Object1"] = "test";
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 |