7

我可以为单个请求的长度设置某种全局变量,以便页面的所有控件都可以响应它,而不必将其传递给每个控件吗?

例如,如果有人在我的 MasterPage 上点击了 Save 按钮,我可以设置一些东西,以便我的 Page 上的每个 UserControl 都可以有一个 Page_Load,例如:

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

这似乎比让来自母版页的委托调用 Page 的保存函数,然后调用 UC1.saveData() 到每个 UserControl 容易得多,尽管我知道这是更好的面向对象思维。

4

1 回答 1

23

是的你可以。查看明显的位置: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;
        }
    }
}
于 2009-01-02T20:36:03.770 回答