Imposta la variabile globale per la durata di una richiesta
-
03-07-2019 - |
Domanda
Posso impostare un qualche tipo di variabile globale per la lunghezza di una singola Richiesta, in modo che tutti i controlli della pagina possano rispondervi senza doverlo passare a ciascuno di essi?
Ad esempio, se qualcuno preme un pulsante Salva sulla mia pagina principale, posso impostare qualcosa in modo che ogni UserControl sulla mia pagina possa avere un Page_Load come:
protected void Page_Load(object sender, EventArgs e)
{
if (isSaving) // isSaving is a global variable
{
saveData(); // save myself
}
loadData();
}
Sembra molto più semplice che avere un delegato dalla pagina principale che chiami la funzione di salvataggio della Pagina, che quindi chiama UC1.saveData () a ciascun UserControl, anche se so che è meglio il pensiero orientato agli oggetti.
Soluzione
Sì, puoi. Guarda il luogo ovvio: la raccolta HttpContext e HttpContext.Current.Items
che è sempre accessibile durante la gestione delle richieste (vedi http://msdn.microsoft.com/en-us/library/system.web.httpcontext.items.aspx ).
Proprio come un suggerimento :
public static class RequestScopedData
{
private const string key = "key_that_you_choose";
public static bool IsSaving
{
get
{
object o = HttpContext.Current.Items[key];
return Convert.ToBoolean(o);
}
set
{
HttpContext.Current.Items[key] = value;
}
}
}