Définir la variable globale pour la durée d'une demande
-
03-07-2019 - |
Question
Puis-je définir une sorte de variable globale pour la longueur d'une seule requête, afin que tous les contrôles de la page puissent y répondre sans avoir à la transmettre à chacun d'eux?
Par exemple, si une personne clique sur le bouton Enregistrer de ma page maître, pourrais-je définir quelque chose pour que chaque contrôle utilisateur de ma page puisse avoir un Page_Load tel que:
protected void Page_Load(object sender, EventArgs e)
{
if (isSaving) // isSaving is a global variable
{
saveData(); // save myself
}
loadData();
}
Cela semble beaucoup plus simple que de demander à un délégué de la page principale d'appeler la fonction de sauvegarde de la page, qui appelle ensuite UC1.saveData () à chaque contrôle UserControl, même si je sais que la réflexion est mieux orientée objet.
La solution
Oui, vous pouvez. Regardez l'endroit évident: le HttpContext et la collection HttpContext.Current.Items
toujours accessibles pendant le traitement de la demande (voir http://msdn.microsoft.com/en-us/library/system.web.httpcontext.items.aspx ).
Comme un indice :
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;
}
}
}