在网上搜索后,似乎有一个强烈的共识,即防止刷新触发数据库访问的一个好方法是使用 ViewState 变量和 Session 变量来检测条件。这是我的基页类中的代码:
protected override void OnLoad( EventArgs e )
{
base.OnLoad( e );
if ( IsPostBack && ViewState["REFRESH_CHECK"] != Session["REFRESH_CHECK"] )
{
IsRefresh = true;
}
Session["REFRESH_CHECK"] = System.Guid.NewGuid().ToString();
ViewState["REFRESH_CHECK"] = Session["REFRESH_CHECK"];
}
public virtual bool IsRefresh
{
get;
private set;
}
所以在我的页面中,我有一些看起来像这样的代码:
protected void Page_Load( object sender, EventArgs e )
{
if ( !IsPostBack )
{
if ( !IsRefresh )
{
doStuffThatShouldOnlyBeDoneOnce();
}
}
}
这在调试时工作得很好,但是当我在生产系统上运行时,我总是得到两次 doStuff...() 方法的调用。当然,当我调试它时,只有一个调用。
它可能相关也可能不相关,但我也在使用嵌套母版页。
有任何想法吗?