繁体   English   中英

OnClick和OnClientClick的操作顺序相反吗?

[英]Reverse order of operations for OnClick and OnClientClick?

我有一些想在单击按钮时运行的简单javascript,但是我还希望在服务器上进行一些回发操作。 逻辑代码如下所示:

<asp:Button ID="btnOK" runat="server" Text="Save Changes" OnClientClick="UpdateParent();" OnClick="btnOK_Click" />
<asp:Button ID="btnCancel" runat="server" Text="Cancel" OnClientClick="window.close();" />

<script language="javascript" type="text/javascript">
    function UpdateParent()
    {
    window.opener.document.location.reload(true); // or should we postback instead?
    window.close();     
    }
</script>

基本上,弹出窗口应刷新其父窗口,然后关闭自身。 但是...如果我调用window.close(),则不会发生回发并且不会调用按钮处理程序。 但是很明显,OnClientClick是在回发发生之前调用的。 我是否必须在按钮处理程序中发出此javascript并在回发后页面加载时运行它? 如果是这样的话,如今对于ASP.NET 2.0 正确的做法是什么?

令人遗憾的是,上面的代码非常简洁明了,因此无法正常工作。

您必须在关闭窗口之前进行回发。 另外,您还想在刷新父窗口之前进行回发,因为我猜想刷新窗口的原因是要显示要保存的信息。

使用ClientScript对象中的RegisterStartupScript在回发后运行代码:

Page.ClientScript.RegisterStartupScript(this.GetType(), "close", "window.opener.location.reload(true);window.close();", true);

但是,如果父页面是回发的结果,则将导致浏览器中的对话框窗口通知用户需要发帖请求才能重新加载页面。 为了避免这种情况,您必须执行一些操作,例如在父页面中调用一个函数,该函数可以执行回发以更新页面。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM