如何在window.onunload中确定PostBack值?

时间:2012-01-23 14:34:08

标签: c# javascript asp.net

在我们的项目中,我们在用户离开页面后删除了一些内容。我们正在使用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);
  }
}

有人帮我吗?

2 个答案:

答案 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;可以做同样的事情。 ,我相信......