2009-11-12 119 views
0

我有一些简单的JavaScript,我想单击按钮时运行,但我也想要在服务器上发生一些回发操作。这个逻辑的代码如下所示:OnClick和OnClientClick操作的颠倒顺序?

<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来说,现在的合适的方法是什么呢?

上述代码无法正常工作,这很遗憾,因为它非常简单直接。

回答

0

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

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

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

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

+0

完成此操作。在隐藏按钮上使用GetPostBackBackEventReference在父页面上添加JS刷新功能。 – Bryan 2009-11-20 20:13:56