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

本文关键字:redirect response 在新窗口中打开 | 更新日期: 2023-09-27 17:56:50

任何人都可以建议我们如何在 c# 中使用 Response.Redirect 在新窗口中打开页面,我知道我们可以使用 response.write 来做到这一点,如下所示:

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

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

请指教!!

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

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

如果您可以满足于 ASP:超链接而不是 ASP:Linkbutton 或 ASP:Button,则可以更轻松地处理导航。与其在回发期间使用 Response.Redirect,不如在Page_Load或其他事件期间构建超链接的 NavigateURL:

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

当然离开更礼貌.仅定位,因为与按钮、链接按钮和图像按钮不同,超链接可以右键单击,并且可以从上下文菜单中获得"在新页面/选项卡中打开",从而使用户能够控制如何处理导航。

正如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

这是重定向器.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

和重定向器的 HTML .asp

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

这不是真正优雅的代码,但它可以解决问题。显然,如果禁用javascript,它就不起作用。

我在这里整理了一个示例。
希望对您有所帮助。

没有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)

如果你想禁用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的想法会让你头疼,因为它刷新了父页面。
希望这对某人有所帮助。:)

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

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

此代码不能用于 HTTPS 对于 HTTPS 执行以下操作

页面中的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);

此代码无法绕过浏览器弹出窗口阻止程序。 用户必须允许它运行。 对于IE,它会在新窗口中打开或新选项卡,直到Firefox和Chrome中的IE版本,它会打开新选项卡

享受吧!!