2015-04-06 134 views
0

我有一個單擊事件按鈕,我希望當用戶單擊它來打開另一個頁面,但是來自同一個問題。在另一個選項卡中打開另一個asp.net頁面

我想這

Response.Write("<script>window.open('http://www.google.com.hk/','_blank');</script>"); 

但問題是,它會打開的頁面不是在新標籤

我怎樣才能在新標籤中打開它?

+1

如果你發現自己使用'Response.Write'注入代碼或標記到網頁,你這樣做是不對的。總有一個更好的辦法。 – mason 2015-04-06 13:23:31

回答

2

試試這個

ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "key", "window.open('http://www.google.com.hk/','_blank');", true); 
+0

它正在工作,但我正在尋找一些解決方案,我只是把網頁的名稱,沒有完整的網址,因爲我不知道客戶將在哪個端口上部署此應用程序。請你幫忙 – 2015-04-06 10:44:02

+0

但是它會映射到一些域? – Mairaj 2015-04-06 10:46:50

+0

我改變了喲這個'ScriptManager.RegisterClientScriptBlock(this,this.GetType(),「key」,「window.open('EmailTemplate.aspx?emailAddress ='+ emailAddress +'','_ blank');」,true);'現在它正在工作,但你認爲這是正確的嗎?加上一個,我會接受你的答案,當系統允許 – 2015-04-06 10:47:51

1

我寧願用RegisterStartupScript而不是RegisterClientScriptBlock

以下是使用RegisterStartupScript的方法。你應該在你的情況下使用它。

ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), "ReportPage", "javascript:window.open('EmailTemplate.aspx?emailAddress="+emailAddress+"','_blank');", true); 

因爲當你使用RegisterStartupScript,它會在頁面(表單的結束標籤前右)的所有元素渲染後,你的腳本。這使腳本可以調用或引用頁面元素,而不會在頁面的DOM中找到它們。

另一方面,當您使用RegisterClientScriptBlock時,該腳本會緊接在Viewstate標記之後,但在任何頁面元素之前呈現。由於這是一個直接腳本(不是可以調用的函數,它會立即被瀏覽器執行,但是瀏覽器在這個階段沒有在頁面的DOM中找到標籤,因此你應該會收到一個「找不到對象」錯誤。

更多細節現在參觀this答案。

相關問題