2012-05-10 94 views
0

我試圖用按鈕單擊以在新選項卡/窗口中打開頁面。我查看了與this類似的解決方案,但給出的答案要麼是使用鏈接,要麼是在同一個窗口中打開它。我需要使用一個按鈕,因爲它需要根據表單中輸入的標準數據(字符串操作)生成鏈接。這個按鈕雖然沒有提交表單,它只是驗證外部網站上的一些數據。我需要在不同的窗口或選項卡中使用它們,以便它們可以在我的表單和驗證網站之間來回切換。這基本上是我目前Button_Click事件:使用按鈕在ASP.NET中的新選項卡/窗口中打開鏈接

var Address = AddressTextbox.Text.Trim(); 
Address = Address.Replace(' ', '+'); 
var Url = "http://www.example.com/query?text=" + Address + "&param1=foo&param2=bar"; 
Response.Redirect(Url); 

這個工程除了Response.Redirect(Url)只能在同一個窗口中打開,而不是一個新的。

回答

5

只需從按鈕上的Click事件處理程序中吐出JavaScript代碼即可。

var Address = AddressTextbox.Text.Trim(); 
Address = Address.Replace(' ', '+'); 
var Url = "http://www.example.com/query?text=" + Address + "&param1=foo&param2=bar"; 
Page.ClientScript.RegisterStartupScript(this.GetType(), "dsadas", "window.open('"+Url+"');", true); 
+0

這樣做。我曾嘗試過類似的東西,但失敗了。我認爲以前我在開始時錯過了'Page.',最後錯過了',true'。但是''dsadas''有什麼用?這基本上只是一個一次性的字符串,因爲所需的參數? – techturtle

+1

@techturtle正好。這是我的懶惰。它應該是一個唯一標識你正在吐出的腳本的關鍵。您應該將其與「IsClientScriptBlockRegistered」一起使用,以確定腳本是否已添加到頁面中。 http://msdn.microsoft.com/en-us/library/aa5tktc9.aspx – Icarus

3

使用OnClientClick屬性:

<script type="text/javascript"> 
    redirectToPage = function(url){ 
     void(window.open(url, "child_window")); 
     return false; 
    } 
</script> 
<asp:Button ID="Button1" runat="server" 
    Text="Click Me!" 
    OnClientClick="return redirectToPage('/somefolder/somepage.aspx');" /> 

使用OnClientClick屬性,記得要return false末是很重要的,否則按一下按鈕會觸發回發。

編輯

如果你想打開的單擊事件處理程序的新窗口,你可以做這樣的事情:

protected void Button1_Click(object sender, EventArgs e) 
{ 
    Page.ClientScript.RegisterStartupScript(Page.GetType(), "open_window", 
     string.Format("void(window.open('{0}', 'child_window'));", "/somefolder/somepage.aspx"), true); 
} 

誠然,這是一種醜陋的,但如果有在執行按鈕點擊邏輯之前您不會擁有的某些信息,這可能是您的最佳選擇。如果您有任何方法可以在單擊該按鈕之前構建網址,則只需在代碼隱藏中指定OnClientClick即可。

+0

我已經看到過,但我不知道如何將它傳遞給我自定義的URL字符串。直到用戶輸入字符串,我纔會知道字符串的文本。 – techturtle

相關問題