如何使用c#中的response.redirect在新窗口中打开页面

时间:2011-05-19 11:19:45

标签: c# asp.net html

有人可以建议我们如何使用c#中的Response.Redirect在新窗口中打开页面,我知道我们可以使用response.write来执行此操作,如下所示:

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

但是当禁用javascript时,上述代码将无法运行。

请建议!!

6 个答案:

答案 0 :(得分:3)

Response.redirect无法打开新窗口,它会将客户端HTTP请求重定向到当前浏览器窗口中的新位置。这是服务器端的限制,要在客户端计算机上执行弹出,您将在某些时候需要客户端代码(IE,Javascript)。

答案 1 :(得分: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";
}

当然离开是更礼貌的。单独的目标,因为与按钮,链接按钮和图像按钮不同,可以右键单击超链接,并且可以从上下文菜单中“打开新页面/选项卡”,使用户可以控制如何处理导航。

答案 2 :(得分: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)

答案 3 :(得分:0)

正如Tom 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的HTML

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

这不是真正优雅的代码,但它可以解决问题。 显然,如果javascript被禁用,它将无效。

我已经整理了一个样本here 希望它有所帮助。

答案 4 :(得分:0)

如果你想禁用javascript并且仍然可以打开一个窗口,我建议你成为魔术师。

使用javascript和response.redirect作为服务器按钮(例如)而不刷新父窗口,您应该使用以下代码:

<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的想法会让你头疼,因为它会刷新父页面。
希望这有助于某人。 :)

答案 5 :(得分:0)

如果您使用的是http,请使用以下代码

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

此代码不能用于https for https do

页面中的javascript

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

后面的c#代码

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

此代码无法通过浏览器弹出窗口阻止程序。用户必须允许它运行。因为它在新窗口或新标签中打开,即firefox和chrome中的版本,它会打开新标签

享受它!!