ViewData i ViewBag umożliwiają dostęp do dowolnych danych w widoku przekazanym z kontrolera.ViewBag, ViewData, TempData, Session - jak i kiedy z nich korzystać?
Główna różnica między tymi dwoma rodzajami to sposób uzyskiwania dostępu do danych. W ViewBag uzyskujesz dostęp do danych za pomocą ciągu znaków jako klawiszy - ViewBag ["numbers"] W ViewData uzyskujesz dostęp do danych przy użyciu właściwości - ViewData.numbers.
ViewData przykład
STEROWNIK
var Numbers = new List<int> { 1, 2, 3 };
ViewData["numbers"] = Numbers;
WIDOK
<ul>
@foreach (var number in (List<int>)ViewData["numbers"])
{
<li>@number</li>
}
</ul>
ViewBag przykład
STEROWNIK
var Numbers = new List<int> { 1, 2, 3 };
ViewBag.numbers = Numbers;
WIDOK
<ul>
@foreach (var number in ViewBag.numbers)
{
<li>@number</li>
}
</ul>
Sesja to kolejny bardzo przydatny przedmiot, który będzie posiadał żadnych informacji.
Na przykład, gdy użytkownik zalogował się do systemu, który chce zachować swój poziom autoryzacji.
// GetUserAuthorizationLevel - some method that returns int value for user authorization level.
Session["AuthorizationLevel"] = GetUserAuthorizationLevel(userID);
Te informacje będą przechowywane w sesji jak długo sesji użytkownika jest aktywne. Można to zmienić w pliku Web.config:
<system.web>
<sessionState mode="InProc" timeout="30"/>
Więc kontroler wewnątrz działania:
public ActionResult LevelAccess()
{
if (Session["AuthorizationLevel"].Equals(1))
{
return View("Level1");
}
if (Session["AuthorizationLevel"].Equals(2))
{
return View("Level2");
}
return View("AccessDenied");
}
TempData jest bardzo podobny do ViewData i ViewBag jednak będzie on zawierał dane tylko dla jedna prośba.
KONTROLER
// Ty stworzył metodę, aby dodać nowego klienta.
TempData["ClientAdded"] = "Client has been added";
WIDOK
@if (TempData["ClientAdded"] != null)
{
<h3>@TempData["ClientAdded"] </h3>
}
TempData jest przydatna, gdy chcesz przekazać pewne informacje z widoku do kontrolera. Na przykład chcesz zatrzymać czas, kiedy żądanie zostało wyświetlone.
WIDOK
@{
TempData["DateOfViewWasAccessed"] = DateTime.Now;
}
KONTROLER
if (TempData["DateOfViewWasAccessed"] != null)
{
DateTime time = DateTime.Parse(TempData["DateOfViewWasAccessed"].ToString());
}
Dzięki za więcej informacji na ten temat! To powinno być naprawdę pomocne dla większości ludzi. –
Czy jest tu pytanie lub czy jest to wpis na blogu? W porządku jest odpowiedzieć na własne pytanie, ale należy to zrobić jako odpowiedź, a nie jako część pytania. Co ważniejsze, materiał ten był już wcześniej omawiany, na przykład [Jaki jest odpowiedni czas dla ViewData, ViewBag, Session, TempData] (http://stackoverflow.com/questions/12676924/what-is-the-right-time -for-viewdata-viewbag-session-tempdata) –
Zapamiętam to na przyszłość i przepraszam za to. Próbowałem podać więcej przykładów, a może bardziej doświadczeni programiści również dzielą się swoimi doświadczeniami. –