在我们的项目中,我们在用户离开页面后删除了一些内容。我们正在使用window.unload事件来执行此操作。
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事件之前调用了寄存器方法,但是在onunload事件触发后设置了_isPostBack ...
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 :(得分: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
中了解它是否为回发答案 1 :(得分:0)
我希望我在这里走上正轨,
据我了解, ClientMide是OnUnload(), 因此您没有服务器对象 你可以做什么...将值保存在隐藏的字段中。
因为我习惯于PHP,你甚至可以将值嵌入到Javascript变量中 不知道这是否适用于ASP.NET:
<script language="javascript">
var MyServerVariable = "<?PHP echo MyServerVariable ?>"
if(MyServerVariable == "Blah...")
{
}
</script>
转换为
<script language="javascript">
var MyServerVariable = "VALUE"
if(MyServerVariable == "Blah...")
{
}
</script>
但是&lt; asp:Label /&gt;可以做同样的事情。 ,我相信......