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.

È stato utile?

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;
        }
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top