2008-11-21 32 views
3

我有一個LinkBut​​ton必須回發執行一些邏輯。ASP.NET WebForms +回發然後打開彈出

完成後,我不想將頁面加載回瀏覽器,而是想讓它保持獨立,並彈出一個新窗口。

到目前爲止,我所擁有的最好想法是將LinkBut​​ton放入UpdatePanel中,並在重新加載時讓它呈現一些JavaScript,但我認爲這完全是件怪事。另外,如果我記得正確的話,更新面板中的JavaScript將不會運行。

還有其他想法嗎?

+0

你想將結果加載到彈出窗口中,還是不同的東西? – 2008-11-21 19:57:13

+0

結果進入彈出窗口。我不想全面刷新主頁面,因爲這會觸發一堆驗證器並快速變得醜陋。 – FlySwat 2008-11-21 20:14:53

回答

6

使用LinkBut​​ton.PostBackUrl設置不同的頁面張貼到,有的客戶端腳本來獲得一個新的窗口(和恢復,以便將來回傳正常工作的老目標)。第二頁可以使用PreviousPage從原始頁面訪問任何需要的狀態。

<script runat="server"> 
    void lnk_Click(object sender, EventArgs e) { 
     // Do work 
    } 
</script> 

<script type="text/javascript"> 
    var oldTarget, oldAction; 
    function newWindowClick(target) { 
     var form = document.forms[0]; 
     oldTarget = form.target; 
     oldAction = form.action; 
     form.target = target; 

     window.setTimeout(
     "document.forms[0].target=oldTarget;" 
     + "document.forms[0].action=oldAction;", 
     200 
    ); 
    } 
</script> 

<asp:LinkButton runat="server" PostBackUrl="Details.aspx" Text="Click Me" 
    OnClick="lnk_Click" 
    OnClientClick="newWindowClick('details');" /> 
1

你可以嘗試的一件事是讓你的LinkBut​​ton OnClick事件完成它的處理,然後用彈出代碼註冊一個Page.ClientScript.RegisterStartupScript,這會在頁面加載後將一些JavaScript放入標籤中。這應該在處理完成後啓動新窗口。

編輯:讀你的評論,我相信你仍然可以使用這種方法,將你的結果存儲在會話變量中,然後讓彈出頁面從那裏拉出結果。

2

下面是代碼:

protected void Button1_Click(object sender, EventArgs e) 

{ 

// Do some server side work 

string script = "window.open('http://www.yahoo.com','Yahoo')"; 

if (!ClientScript.IsClientScriptBlockRegistered("NewWindow")) 

{ 

ClientScript.RegisterClientScriptBlock(this.GetType(),"NewWindow",script, true); 

} 

}