我正在开发一个带有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()函数执行之前强制回发完全完成,以便可以通过新的值吗?
提前致谢
答案 0 :(得分:1)
你必须完全改变你的方法,只要它不是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);