【问题标题】:Why does window.onload ignore postback?为什么 window.onload 忽略回发?
【发布时间】:2015-01-02 23:46:27
【问题描述】:

考虑以下 js 代码(在加载时单击 asp.net Button):

function doSomething()
{
    document.getElementById("<%= theButton.ClientID %>").click();
}
window.onload = doSomething;

页面加载时 - 执行按钮的代码隐藏,并再次加载页面(带有新信息)。这应该引入了一个无限循环的错误,但事实并非如此。它只被调用一次,在回发中被忽略。

为什么?

【问题讨论】:

  • 页面如何重新加载??这是什么意思
  • 为什么不使用 Javascript 中的_doPostBack() 方法?
  • @EkanshRastogi 这是一个 asp.net 的东西——当代码隐藏被执行时——页面得到一个postback
  • 手动点击按钮时页面是否回传?
  • @ispiro 如果您需要在单击按钮之前确认它不是回发,为什么不直接使用!Page.IsPostBack 来确定是否执行该代码?

标签: javascript asp.net .net


【解决方案1】:

假设您希望仅在页面第一次加载时调用 doSomething 方法:

您应该在后面的代码中使用Page.RegisterStartupScript 将您对doSomething 的调用添加到页面中,但将其包装在一个if 语句中以检查它是否是回发。这样,您的方法只会在页面第一次加载时被调用:

 if(!Page.IsPostBack)
 {
    Page.ClientScript.RegisterStartupScript(GetType(), "buttonClickScript" "window.onload = doSomething;", true);
 }

【讨论】:

  • 他问为什么没有无限循环而不是如何解决它。
  • 我是基于 OP 的评论:“我想知道我是否可以依靠它而不是创建无限循环”。这样做,您不需要依赖它而不创建无限循环。我想所描述的行为是因为在加载 asp.net 生成的 _postback 脚本并将其附加到按钮之前执行了 OPs 脚本。我不会依赖它,我会从服务器端代码控制页面流。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-06
  • 2019-03-22
  • 2017-07-07
  • 2012-01-30
  • 2021-02-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多