Установить глобальную переменную для продолжительности запроса - PullRequest
7 голосов
/ 02 января 2009

Могу ли я установить какую-то глобальную переменную для длины одного запроса, чтобы все элементы управления страницы могли отвечать на него, не передавая его каждому из них?

Например, если кто-то нажал кнопку «Сохранить» на моей MasterPage, могу ли я установить что-то, чтобы каждый UserControl на моей странице мог иметь Page_Load, например:

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

Это кажется намного проще, чем когда делегат с главной страницы вызывает функцию сохранения страницы, которая затем вызывает UC1.saveData () для каждого элемента UserControl, хотя я знаю, что это лучше объектно-ориентированного мышления.

1 Ответ

23 голосов
/ 02 января 2009

Да, вы можете. Посмотрите на очевидное место: HttpContext и коллекцию HttpContext.Current.Items, которая всегда доступна во время обработки запроса (см. http://msdn.microsoft.com/en-us/library/system.web.httpcontext.items.aspx).

Как подсказка :

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;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...