2011-05-19 90 views
0

可有人建議如何,我們可以使用C#Response.Redirect打開新窗口的頁面,我知道我們可以使用的Response.Write做到這一點,如下所示:如何使用C#中的Response.Redirect打開新窗口的頁面

Response.Write("<script>"); 
Response.Write("window.open('"+url+"','_blank')"); 
Response.Write("</script>"); 

但是,當禁用javascript時,上述代碼將無法運行。

請建議!!

+0

請顯示未啓用javascript的重定向網站示例。 – Hogan 2011-05-19 11:59:47

回答

0

當湯姆Gullen認爲是唯一的出路。 我假設你正在使用ASP.NET。

您可以創建一個公共函數,它接收您想在新窗口中打開的Url。 此功能然後重定向到執行髒作業的頁面。

Public Function ResponseRedirect(ByVal urlRedirect As String) As Boolean 
    HttpContext.Current.Response.Redirect("Redirector.aspx?goto=" & HttpUtility.UrlEncode(urlRedirect)) 
End Function 

這是Redirector.aspx

Public Partial Class Redirector 
    Inherits System.Web.UI.Page 

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
     Dim OpenNewPage As String = "" 
     If Request.QueryString("goto") IsNot Nothing Then 
      Me.OpenNewPage = Request.QueryString("goto") 
     End If 
     If Request.UrlReferrer.AbsoluteUri IsNot Nothing Then 
      Me.Referer = Request.UrlReferrer.AbsoluteUri 
     End If 
    End Sub 

    Private _OpenNewPage As String = "" 
    Public Property OpenNewPage() As String 
     Get 
      Return _OpenNewPage 
     End Get 
     Set(ByVal value As String) 
      _OpenNewPage = value 
     End Set 
    End Property 

    Private _Referer As String = "" 
    Public Property Referer() As String 
     Get 
      Return _Referer 
     End Get 
     Set(ByVal value As String) 
      _Referer = value 
     End Set 
    End Property 

End Class 

和Redirector.asp

<script type="text/javascript"> 
    window.open('<%=Me.OpenNewPage%>', '_blank', ''); 
    window.document.location.href = '<%=Me.Referer%>'; 
</script> 

的HTML這不是真的很優雅的代碼,但它的伎倆。 顯然,如果JavaScript被禁用,它不起作用。

我已經放在一起樣品here
希望它有幫助。

+0

OQ指定不可以有javascript。這有什麼幫助? – Hogan 2011-05-19 16:09:22

3

Response.redirect無法打開新窗口,它將客戶端HTTP請求重定向到當前瀏覽器窗口中的新位置。這是服務器端的一個限制,在客戶端機器上執行一個彈出窗口,您將在某些時候需要客戶端代碼(IE,Javascript)。

+0

你可以請示例使用我! – 2011-05-19 11:23:32

+0

@Manu:不,他不能。使用'Response.Redirect'無法做到這一點。 – 2011-05-19 11:25:46

0

沒有javascript,無法動態打開一個新窗口。

如果您希望窗口始終重定向,您可以傳回HTML,以通知瀏覽器在標頭信息中重定向。像這樣:

<META HTTP-EQUIV="Refresh" CONTENT="5; URL=html-redirect.html"> 

請記住,這基本上會立即發生(或在上面的情況在5秒鐘內)。如果你想讓頁面在沒有javascript的地方出現,你需要一個用戶點擊的鏈接。

您可以動態地在C#這樣補充一點:

Dim reMetaTag As New HtmlMeta 
reMetaTag.HttpEquiv = "Refresh" 
reMetaTag.Content = "5;URL=http://www.site.com" 
Page.Header.Controls.Add(reMetaTag) 
+0

我沒有你的邏輯,你可以請更清楚!謝謝 – 2011-05-19 11:24:26

+0

沒有邏輯。這是HTML的一部分,而不是JavaScript。這只是標記。 – Hogan 2011-05-19 11:26:08

0

如果你想禁用JavaScript,仍然可以打開一個窗口,我建議你成爲一名魔術師。

使用JavaScript和響應。重定向服務器的按鍵(例如),而無需刷新父窗口,你應該使用下面的代碼:

<input type="button" id="Example" value="Click!" runat="server"
onclick="var win = window.open('','Stack','width=500,height=600,menubar=no'); document.forms[0].target = 'Stack';" onserverclick="Save" />

在後面的代碼你的頁面定義

保存功能會是這樣的

protected void Save(object sender, EventArgs e) 
{ 
//your code here 
Response.Redirect(url);//url it's a string for target url 
} 

所以Tom Gullen是錯的,Manu的想法會讓你頭疼,因爲它刷新父頁面。
希望這有助於某人。 :)

1

如果您可以解決使用ASP:超鏈接而不是ASP:Linkbutton或ASP:Button,您可以更輕鬆地處理導航。而不是回傳過程中使用的Response.Redirect,Page_Load中或其他一些事件中只是建立超鏈接的NavigateURL:

protected void Page_Load (object sender, EventArgs e) 
{ 
    lnkViewPage.NavigateURL = sURL; 
    lnkViewPage.Target = "_blank"; 
} 

當然是比較客氣獨自離開.TARGET因爲不像按鈕,了LinkBut​​ton,並imagebuttons,超鏈接可以右鍵單擊,並且可以從上下文菜單中獲得「在新頁面/標籤中打開」,從而使用戶可以控制如何處理導航。

0

如果您正在使用HTTP,然後下面的代碼使用

Response.Write("<script>window.open ('URL','_blank');</script>"); 

此代碼不能用於HTTPS HTTPS的背後

C#代碼下面做

的JavaScript頁面

function shwwindow(myurl) { 
    window.open(myurl, '_blank'); 
} 

string URL = ResolveClientUrl("~") + "**internal page path**"; 
ScriptManager.RegisterStartupScript(this, this.GetType(), "show window", 
"shwwindow('"+URL+"');", true); 

此代碼不能通過瀏覽器彈出窗口阻止程序。用戶必須允許它運行。爲ie它打開新的窗口或新的標籤上,即在IE版本在Firefox和鉻它打開新標籤

享受它!

相關問題