2011-05-19 125 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和铬它打开新标签

享受它!

相关问题