2009-11-12 200 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