2009-01-02 6 views
6

Kann ich eine Art globale Variable für die Länge einer einzelnen Anforderung festlegen, sodass alle Steuerelemente der Seite darauf antworten können, ohne sie an alle übergeben zu müssen?Festlegen der globalen Variablen für die Dauer einer Anforderung

Zum Beispiel, wenn jemand eine Schaltfläche Speicher auf meinem Master getroffen, konnte ich gesetzt etwas, so dass jede Usercontrol auf meiner Seite kann eine Page_Load hat wie:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (isSaving) // isSaving is a global variable 
    { 
     saveData(); // save myself 
    } 
    loadData(); 
} 

Es scheint nur viel einfacher, als ein mit Delegate von der Masterpage rufen Sie die Speicherfunktion der Seite auf, die dann UC1.saveData() an jedes UserControl aufruft, obwohl ich weiß, dass das objektorientierte Denken besser ist.

Antwort

21

Ja, Sie können. Sehen Sie sich den naheliegenden Ort an: den HttpContext und die HttpContext.Current.Items Sammlung, auf die während der Bearbeitung der Anfrage immer zugegriffen werden kann (siehe http://msdn.microsoft.com/en-us/library/system.web.httpcontext.items.aspx).

So wie ein Hinweis:

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; 
     } 
    } 
} 
+1

+1 für sie in einer benutzerdefinierten Klasse Einwickeln der Schlüsselnamen –

+0

Vielen Dank zu zentralisieren - das war sehr hilfreich. –