如何在 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被禁用时,上面的代码将无法运行。
请指教!!
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版本,它会打开新选项卡
享受吧!!