Pergunta

Posso definir algum tipo de variável global para o comprimento de uma única solicitação, para que todos os controles da página pode responder a isso sem ter que passá-lo através de cada um deles?

Por exemplo, se alguém apertar um botão Salvar no meu MasterPage, eu poderia definir alguma coisa de modo que cada UserControl na minha página pode ter um Page_Load como:

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

Parece apenas muito mais fácil do que ter um delegado da chamada masterpage da página Conservar a função, que em seguida, chama UC1.saveData () para cada UserControl, embora eu saiba que é melhor Object Oriented pensamento.

Foi útil?

Solução

Sim, você pode. Olhe para o lugar óbvio: o HttpContext ea coleção HttpContext.Current.Items que está sempre acessível durante a solicitação de movimentação (veja http://msdn.microsoft.com/en-us/library/system.web.httpcontext.items.aspx ).

Assim como um dica :

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;
        }
    }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top