0

我正在开发一个带有 VB 代码的 .NET ASP 应用程序。我有 2 个文本框和 1 个按钮。单击按钮时,使用javascript打开一个新窗口(我们称之为新窗口x)。

 button.OnClientClick = "ShowWindowX();return false;"

ShowWindowX() 函数打开一个带有 URL 的新窗口,该 URL 从文本框中传入两个参数。当我将新值插入文本框并单击远离文本框(但不是在按钮上)时,页面会进行回发,因为我已将其设置为每当文本框失去焦点时进行回发,将新值发布回来到服务器。

问题是,如果我编辑任何文本框值,例如将 3 更改为 4 并立即单击按钮,而不先单击文本框,那么新值不会被拾取,所以我仍然得到 3。我试图强制单击按钮时的回发通过以下方式:

 btnBBHistory.OnClientClick = "__doPostBack();ShowWindowX();return false;"

尽管这确实会导致回发,但是在我关闭由于 ShowWindowsX 功能而打开的窗口之前,回发不会完成。

任何人都可以建议在 ShowWindowX() 函数执行之前强制回发完全完成以便可以通过新值的方法吗?

提前致谢

4

1 回答 1

0

你必须完全改变你的方法,只要它不是一个 ajax 调用,它会清除页面上的所有内容,并且页面会被刷新。

那么可以做些什么来实现这一目标呢?如果页面正在回发调用中加载,您可以在后端签入并添加脚本,如下所示:

if (IsPostBack)
    Page.ClientScript.RegisterStartupScript(this.GetType(), "ShowWindowX", 
    "ShowWindowX();", true);

当然,如果您已经注册了其中ShowWindowX定义的脚本,则可以这样做。

但是如果你不希望它在每次回发时都显示窗口,你可以在全局存储中设置一个标志,比如 localStorage,然后在你想打开窗口时检查它:

btnBBHistory.OnClientClick = "__doPostBack();localStorage.callwin=true;return false;"

并在服务器端页面加载中执行以下操作:

if (IsPostBack)
   Page.ClientScript.RegisterStartupScript(this.GetType(), "ShowWindowX", 
   "if(Boolean(localStorage.callwin)){ShowWindowX();localStorage.callwin='';}",
   true);
于 2014-02-27T13:55:41.447 回答