我正在使用后面的VB代码开发.NET ASP应用程序。我有2个TextBoxes和1个按钮。单击按钮时,使用JavaScript打开新窗口(让我们调用新窗口x)。

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

showwindowx()函数打开一个新窗口,其中包含从文本框中的两个参数中传递的URL。当我将新值插入文本框时,单击“远离文本框”(但不在按钮上)时,页面会进行回发,因为我已将其设置为在TextBoxes失去焦点时,执行将发布新值的回发到服务器。

问题是,如果我编辑任何文本框值,如更改3到4,请立即单击按钮,无需单击文本框首先,未拾取新值,所以我仍然得到3.我尝试过在通过以下内容按钮时强制回发:

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

虽然这确实导致回发,但在关闭由于showwindowsx函数由于showwindowsx函数打开而打开的窗口之前,返回不会完成。

任何人都可以建议在ShowWindowx()函数执行之前强制回发以完全完成的方式,以便可以通过?

提前感谢

有帮助吗?

解决方案

你必须完全改变你的方法,就不是一个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);
.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top