ViewData e ViewBag consentono di accedere a tutti i dati in vista passati dal controller.ViewBag, ViewData, TempData, Session: come e quando utilizzarli?
La differenza principale tra questi due è il modo in cui si accede ai dati. In ViewBag si accede ai dati usando stringhe come chiavi - ViewBag ["numbers"] In ViewData si accede ai dati usando le proprietà - ViewData.numbers.
Viewdata esempio
CONTROLLER
var Numbers = new List<int> { 1, 2, 3 };
ViewData["numbers"] = Numbers;
VISTA
<ul>
@foreach (var number in (List<int>)ViewData["numbers"])
{
<li>@number</li>
}
</ul>
ViewBag esempio
CONTROLLER
var Numbers = new List<int> { 1, 2, 3 };
ViewBag.numbers = Numbers;
VISTA
<ul>
@foreach (var number in ViewBag.numbers)
{
<li>@number</li>
}
</ul>
sessione è un altro oggetto molto utile che conterrà tutte le informazioni.
Ad esempio, quando l'utente ha effettuato l'accesso al sistema, desidera mantenere il proprio livello di autorizzazione.
// GetUserAuthorizationLevel - some method that returns int value for user authorization level.
Session["AuthorizationLevel"] = GetUserAuthorizationLevel(userID);
Queste informazioni verranno memorizzate in sessione fino a quando la sessione utente è attiva. questo può essere cambiato nel file web.config:
<system.web>
<sessionState mode="InProc" timeout="30"/>
Allora controller dentro l'azione:
public ActionResult LevelAccess()
{
if (Session["AuthorizationLevel"].Equals(1))
{
return View("Level1");
}
if (Session["AuthorizationLevel"].Equals(2))
{
return View("Level2");
}
return View("AccessDenied");
}
TempData è molto simile a Viewdata e ViewBag tuttavia conterrà dati solo per una richiesta.
CONTROLLER
// È stato creato un metodo per aggiungere nuovo cliente.
TempData["ClientAdded"] = "Client has been added";
VISTA
@if (TempData["ClientAdded"] != null)
{
<h3>@TempData["ClientAdded"] </h3>
}
TempData è utile quando si desidera passare alcune informazioni da Vista al controller. Ad esempio, si desidera conservare il tempo in cui è stata richiesta la vista.
VISTA
@{
TempData["DateOfViewWasAccessed"] = DateTime.Now;
}
CONTROLLER
if (TempData["DateOfViewWasAccessed"] != null)
{
DateTime time = DateTime.Parse(TempData["DateOfViewWasAccessed"].ToString());
}
Grazie per ulteriori informazioni su questo! Questo dovrebbe essere molto utile per la maggior parte delle persone. –
C'è una domanda qui o si tratta di un post sul blog? Va bene rispondere alla tua domanda, ma dovrebbe essere fatta come risposta, non come parte della domanda. Ancora più importante, questo materiale è già stato trattato in precedenza, ad esempio [Qual è il momento giusto per ViewData, ViewBag, Session, TempData] (http://stackoverflow.com/questions/12676924/what-is-the-right-time -for-viewdata-viewbag-session-tempdata) –
Lo ricorderò per il futuro e mi dispiace per quello. Ho provato a dare altri esempi e forse alcuni sviluppatori più esperti condividono anche la loro esperienza. –