有人可以建议我们如何使用c#中的Response.Redirect
在新窗口中打开页面,我知道我们可以使用response.write来执行此操作,如下所示:
Response.Write("<script>");
Response.Write("window.open('"+url+"','_blank')");
Response.Write("</script>");
但是当禁用javascript时,上述代码将无法运行。
请建议!!
答案 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中的版本,它会打开新标签
享受它!!