我想使用 Response.Redirect("MyPage.aspx")
在一个新的浏览器窗口中打开页面。我之前曾经做过这样的事情,但是没有使用JavaScript注册脚本方法。我只是不记得怎么做了?
我想使用 Response.Redirect("MyPage.aspx")
在一个新的浏览器窗口中打开页面。我之前曾经做过这样的事情,但是没有使用JavaScript注册脚本方法。我只是不记得怎么做了?
我刚刚找到了答案,它有效 :)
你需要在服务器端的链接/按钮中添加以下内容:
OnClientClick="aspnetForm.target ='_blank';"
我的整个按钮代码看起来像这样:
<asp:LinkButton ID="myButton" runat="server" Text="Click Me!"
OnClick="myButton_Click"
OnClientClick="aspnetForm.target ='_blank';"/>
Response.Redirect("MyPage.aspx");
,并且页面会在新窗口中打开。<script type="text/javascript">
function fixform() {
if (opener.document.getElementById("aspnetForm").target != "_blank") return;
opener.document.getElementById("aspnetForm").target = "";
opener.document.getElementById("aspnetForm").action = opener.location.href;
}
</script>
并且
<body onload="fixform()">
你可以将其用作扩展方法。
public static class ResponseHelper
{
public static void Redirect(this HttpResponse response, string url, string target, string windowFeatures)
{
if ((String.IsNullOrEmpty(target) || target.Equals("_self", StringComparison.OrdinalIgnoreCase)) && String.IsNullOrEmpty(windowFeatures))
{
response.Redirect(url);
}
else
{
Page page = (Page)HttpContext.Current.Handler;
if (page == null)
{
throw new InvalidOperationException("Cannot redirect to new window outside Page context.");
}
url = page.ResolveClientUrl(url);
string script;
if (!String.IsNullOrEmpty(windowFeatures))
{
script = @"window.open(""{0}"", ""{1}"", ""{2}"");";
}
else
{
script = @"window.open(""{0}"", ""{1}"");";
}
script = String.Format(script, url, target, windowFeatures);
ScriptManager.RegisterStartupScript(page, typeof(Page), "Redirect", script, true);
}
}
}
使用这个方法可以很好地覆盖实际的响应对象
Response.Redirect(redirectURL, "_blank", "menubar=0,scrollbars=1,width=780,height=900,top=10");
通过单击事件处理程序构建您的URL:
string strUrl = "/some/url/path" + myvar;
那么:
ScriptManager.RegisterStartupScript(Page, Page.GetType(), "popup", "window.open('" + strUrl + "','_blank')", true);
由于Response.Redirect是在服务器上启动的,因此无法使用它进行操作。
如果您可以直接编写到响应流中,可以尝试以下操作:
response.write("<script>");
response.write("window.open('page.html','_blank')");
response.write("</script>");
fixform技巧很妙,但是:
您可能无法访问加载到新窗口中的代码。
即使您可以访问,您也要依赖于它始终能够无错误地加载。
您还要依赖于用户在其他页面得到加载和运行fixform之前不会单击另一个按钮。
我建议改为这样做:
OnClientClick="aspnetForm.target ='_blank';setTimeout('fixform()', 500);"
在同一页上设置 fixform,看起来像这样:
function fixform() {
document.getElementById("aspnetForm").target = '';
}
你也可以在后台代码中像这样使用
ClientScript.RegisterStartupScript(this.Page.GetType(), "",
"window.open('page.aspx','Graph','height=400,width=500');", true);
window.open('page.aspx','_blank');
,它仍会在新窗口中打开它,并禁用导航栏和缺少导航按钮,而不是新标签页。 - Kasey Speakman使用Response.Redirect是无法实现此功能的,因为它发生在服务器端,无法指示浏览器执行该操作。那么初始窗口中会剩下什么?一片空白的页面吗?
弹出方法将为访问者提供一个安全的问题。
这是我的简单解决方案:并且在任何地方都能正常工作。
<script type="text/javascript">
function targetMeBlank() {
document.forms[0].target = "_blank";
}
</script>
<asp:linkbutton runat="server" ID="lnkbtn1" Text="target me to blank dude" OnClick="lnkbtn1_Click" OnClientClick="targetMeBlank();"/>
<asp:Button ID="btnNewEntry" runat="Server" CssClass="button" Text="New Entry"
OnClick="btnNewEntry_Click" OnClientClick="aspnetForm.target ='_blank';"/>
protected void btnNewEntry_Click(object sender, EventArgs e)
{
Response.Redirect("New.aspx");
}
来源: http://dotnetchris.wordpress.com/2008/11/04/c-aspnet-responseredirect-open-into-new-window/
这篇文章介绍了如何在新窗口中打开ASP.NET应用程序中的重定向链接。它提供了一些简单的代码示例,演示了如何使用JavaScript来实现这个功能。如果您需要在ASP.NET网站中使用重定向链接并将其打开到新窗口中,那么这篇文章可能会对您有所帮助。<asp:Button ID="Button1" runat="server" Text="Go"
OnClientClick="window.open('yourPage.aspx');return false;"
onclick="Button3_Click" />
只需要在按钮事件后调用 Response.Redirect("yourPage.aspx"); 即可。
OnClientClick="aspnetForm.target ='_blank';"
,而是要使用OnClientClick="document.getElementById('Form').target ='_blank';"
。 - colincameron