Mit ViewData und ViewBag können Sie auf alle Daten in der Ansicht zugreifen, die vom Controller übergeben wurden.ViewBag, ViewData, TempData, Session - wie und wann?
Der Hauptunterschied zwischen diesen beiden ist die Art, wie Sie auf die Daten zugreifen. In ViewBag greifen Sie auf Daten zu, die Zeichenfolge als Schlüssel verwenden - ViewBag ["numbers"] In ViewData greifen Sie auf Daten zu, die Eigenschaften verwenden - ViewData.numbers.
Viewdata Beispiel
CONTROLLER
var Numbers = new List<int> { 1, 2, 3 };
ViewData["numbers"] = Numbers;
VIEW
<ul>
@foreach (var number in (List<int>)ViewData["numbers"])
{
<li>@number</li>
}
</ul>
ViewBag Beispiel
CONTROLLER
var Numbers = new List<int> { 1, 2, 3 };
ViewBag.numbers = Numbers;
VIEW
<ul>
@foreach (var number in ViewBag.numbers)
{
<li>@number</li>
}
</ul>
Session ist ein weiteres sehr nützliches Objekt, das keine Informationen halten wird.
Zum Beispiel, wenn sich der Benutzer am System anmeldet und die Berechtigungsstufe beibehalten werden soll.
// GetUserAuthorizationLevel - some method that returns int value for user authorization level.
Session["AuthorizationLevel"] = GetUserAuthorizationLevel(userID);
Diese Informationen werden solange Benutzersitzung ist aktiv in Session gespeichert werden. Dies kann in Web.config-Datei geändert werden:
<system.web>
<sessionState mode="InProc" timeout="30"/>
So dann in der Steuerung innerhalb der Aktion:
public ActionResult LevelAccess()
{
if (Session["AuthorizationLevel"].Equals(1))
{
return View("Level1");
}
if (Session["AuthorizationLevel"].Equals(2))
{
return View("Level2");
}
return View("AccessDenied");
}
TempData ist sehr ähnlich wie Viewdata und ViewBag jedoch nur Daten enthalten für eine Bitte.
CONTROLLER
// Sie haben eine Methode, um neuen Client hinzuzufügen.
TempData["ClientAdded"] = "Client has been added";
VIEW
@if (TempData["ClientAdded"] != null)
{
<h3>@TempData["ClientAdded"] </h3>
}
TempData ist nützlich, wenn Sie einige Informationen von View-Controller zu übergeben möchten. Zum Beispiel möchten Sie Zeit halten, als die Ansicht angefordert wurde.
VIEW
@{
TempData["DateOfViewWasAccessed"] = DateTime.Now;
}
CONTROLLER
if (TempData["DateOfViewWasAccessed"] != null)
{
DateTime time = DateTime.Parse(TempData["DateOfViewWasAccessed"].ToString());
}
Vielen Dank für weitere Informationen! Das sollte für die meisten Menschen sehr hilfreich sein. –
Gibt es hier eine Frage oder ist das ein Blogbeitrag? Es ist in Ordnung, Ihre eigene Frage zu beantworten, aber es sollte als Antwort und nicht als Teil der Frage erfolgen. Noch wichtiger ist, dass dieses Material bereits zuvor behandelt wurde, z. B. [Was ist der richtige Zeitpunkt für ViewData, ViewBag, Session, TempData] (http://stackoverflow.com/questions/12676924/what-is-the-right-time -for-viewdata-viewbag-session-tempdata) –
Ich werde mich daran erinnern, für die Zukunft und tut mir leid. Ich habe versucht, einige Beispiele zu nennen und vielleicht teilen auch einige erfahrenere Entwickler ihre Erfahrungen mit. –