OnClick和OnClientClick的操作的反向顺序?

时间:2009-11-12 01:47:18

标签: asp.net javascript

我有一些简单的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执行此操作的正确方式是什么?

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

1 个答案:

答案 0 :(得分:0)

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

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

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

但是,如果父页面是回发的结果,这将导致浏览器中的对话窗口通知用户需要发布请求来重新加载页面。为了避免这种情况,你必须做一些事情,比如在父页面中调用一个可以进行回发来更新页面的函数。