我可以为单个Request的长度设置某种全局变量,这样页面的所有控件都可以响应它而不必将它传递给每个变量吗?
例如,如果有人点击了我的MasterPage上的“保存”按钮,我是否可以设置一些内容,以便我页面上的每个UserControl都可以具有如下的Page_Load:
protected void Page_Load(object sender, EventArgs e)
{
if (isSaving) // isSaving is a global variable
{
saveData(); // save myself
}
loadData();
}
看起来要比使用母版页中的委托调用Page的save函数容易得多,后者会将UC1.saveData()调用到每个UserControl,尽管我知道这是更好的面向对象思想。
答案 0 :(得分: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;
}
}
}