我有一个简单的访问控制类,它允许检查用户是否具有权限,然后与静态变量进行交互:
private static bool canUpdate = false;
在页面加载期间使用 protected void Page_Load(object sender,EventArgs e)
{
if (!Page.IsPostBack)
{
AccessControl I = new AccessControl(parameter);
canUpdate = I.HaveEdit;
}
BindGrid();
}
这一切都很好,它很简单,并且bool用作另一个方法的一部分(称为gridview代码表达式),以便有条件地在一行中显示控件。 这也很有用。
但是我处于测试阶段并且我已经意识到在正常操作下一切都很好,但是经过一段时间(很重要,如半小时左右),按钮不再显示(换句话说就是canUpdate已设为假。)
显示代码:
protected bool ShowNewStamps(object date)
{
//Returns to Bind Expression whether to display Timestamp Link
if (date == null & canUpdate == true)
return true;
else
return false;
}
日期作为绑定表达式传入,传递之前的单元格日期,因此我知道这不是问题。
这个问题只在页面在很长一段时间后刷新时出现,这是因为静态变量有生命周期而我只在第一页加载时设置变量吗?
答案 0 :(得分:3)
静态变量在一段时间后不会重置。
最有可能是IIS回收您的应用程序,从而创建一个新的AppDomain
和静态。
答案 1 :(得分:2)
static
个变量,就像所有其他变量在一段时间内过期一样。这通常取决于IIS中应用程序池的生命周期。
我认为这不是问题所在。 static
变量在所有会话中共享。这意味着如果其他人打开另一个会话(或者您使用其他浏览器),则会重置该变量。
此类信息应存在于ViewState
或Session
。
学到的经验:不要将static
变量用于用户,会话或页面特定的信息。
答案 2 :(得分:0)
静态变量不会重置。静态和非静态变量之间的区别在于,当您定义静态变量时,您可以确保它在应用程序的生命周期中存在,因为它们通过名称高频堆存储在堆中,该高频堆不受GC控制。但在非静态变量的情况下,GC控制它们的存在。