2009-01-02 19 views
6

¿Puedo establecer algún tipo de variable global para la longitud de una única solicitud, para que todos los controles de la página puedan responder a ella sin tener que pasarla a cada uno de ellos?Establecer variable global para la duración de una solicitud

Por ejemplo, si alguien pulsó un botón Guardar en mi MasterPage, ¿podría establecer algo para que cada control de usuario en mi página puede tener un Page_Load como:

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

Apenas se parece mucho más fácil que tener una delegar desde la página maestra la función de guardar de la página, que luego llama a UC1.saveData() a cada UserControl, aunque sé que es mejor pensar orientado a objetos.

Respuesta

21

Sí, puedes. Observe el lugar obvio: el HttpContext y la colección HttpContext.Current.Items a los que siempre se puede acceder durante el manejo de solicitudes (consulte http://msdn.microsoft.com/en-us/library/system.web.httpcontext.items.aspx).

Así como un indicio :

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 para envolverlo en una clase personalizada para centralizar el nombre de clave –

+0

Muchas gracias - esto fue muy servicial. –

Cuestiones relacionadas