2012-01-23 25 views
1

在我们的项目中,我们正在删除用户离开页面后的东西。我们使用window.unload事件来做到这一点。如何确定window.onunload中的PostBack值?

window.onunload = function() { 
    // delete something 
} 

我们通常使用的UpdatePanel按钮,linkbuttons..etc所以我们没有需要检查Page.IsPostBack属性。

今天我们意识到我们使用了UpdatePanel中的一些按钮,这种情况产生了一些错误。之后,我们决定改变我们的方法,定义一个全局变量(VAR _isPostBack = FALSE),在我们的页面的顶部和:

window.onunload = function() { 
    if (_isPostBack) { 
    _isPostBack = false; 
    return; 
    } 

    // delete something 
} 

Altought我设置在Page_Load中的g_isPostBack,g_isPostBack没有改变。我尝试了“RegisterClientScriptBlock”,“RegisterOnSubmitStatement”和“RegisterStartupScript”方法。注册方法进行的onunload事件之前调用,但_isPostBack在onunload事件后设置触发了......

if (IsPostBack) 
{ 
    Control c = MyClass.GetPostBackControl(this); 
    bool inUpdatePanel = ControlParentForUpdatePanel(c); 

    if (!inUpdatePanel) 
    { 
    ScriptManager.RegisterClientScriptBlock(this, this.GetType(), Guid.NewGuid().ToString(), "_isPostBack = true;", true); 
    } 
} 

是否有任何人帮助我吗?

+0

是变量“g_isPostback”还是“_isPostback”? – kochobay

+0

sory我的错......我写错了他们。他们都是“_isPostBack”。 – ogun

+0

我不确定在ajax帖子上调用onunload方法。 – kochobay

回答

4

这就是诀窍...

如果onsubmit属性添加到您的表单标签:

<form id="form1" onsubmit="return yourPostBack()"> 

,比写自己的功能:

function yourPostBack() 
{ 
    _isPostBack = true; 
    return true; 
} 

终于在页面加载:

if (IsPostBack) 
{ 
    ScriptManager.RegisterClientScriptBlock(this, this.GetType(), Guid.NewGuid().ToString(), "_isPostBack = false;", true); 
} 

与此方法你可以了解它是否回传,在window.onunload

0

我希望我在这里在正确的轨道上,

据我了解, 的onunload的()是客户方, ,因此你没有服务器对象 你可以做什么?是将该值保存在隐藏字段中。

,因为我使用PHP,你甚至可以在嵌入JavaScript变量 不知道这是否applys到ASP.NET值:

<script language="javascript"> 
var MyServerVariable = "<?PHP echo MyServerVariable ?>" 
if(MyServerVariable == "Blah...") 
{ 
} 
</script> 

转化为

<script language="javascript"> 
var MyServerVariable = "VALUE" 
if(MyServerVariable == "Blah...") 
{ 
} 
</script> 

但同样的事情可以用< asp:Label/>完成,我相信...

+0

是的,我可以在JavaScript中嵌入服务器的值,但如果我在Asp.NET中实现“<%= IsPostBack%>”,它总是错误的。 IsPostBack值始终为false,而页面第一次加载... – ogun

+0

? –