118 c# asp.net response.redirect
我想做一个Response.Redirect("MyPage.aspx")但是在新的浏览器窗口中打开它.我之前没有使用JavaScript注册脚本方法就完成了这个.我只是不记得怎么了?
小智 114
我刚刚找到答案,它的工作原理:)
您需要将以下内容添加到服务器端链接/按钮:
OnClientClick="aspnetForm.target ='_blank';"
Run Code Online (Sandbox Code Playgroud)
我的整个按钮代码如下所示:
<asp:LinkButton ID="myButton" runat="server" Text="Click Me!"
OnClick="myButton_Click"
OnClientClick="aspnetForm.target ='_blank';"/>
Run Code Online (Sandbox Code Playgroud)
在服务器端OnClick我做了一个Response.Redirect("MyPage.aspx");页面在新窗口中打开.
您需要添加的另一部分是修复表单的目标,否则每个链接都将在新窗口中打开.为此,请在POPUP窗口的标题中添加以下内容.
<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>
Run Code Online (Sandbox Code Playgroud)
和
<body onload="fixform()">
Run Code Online (Sandbox Code Playgroud)
小智 61
您可以将其用作扩展方法
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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
有了这个,你可以在实际的Response对象上得到很好的覆盖
Response.Redirect(redirectURL, "_blank", "menubar=0,scrollbars=1,width=780,height=900,top=10");
Run Code Online (Sandbox Code Playgroud)
Jam*_*rue 26
因为Response.Redirect是在服务器上启动的,所以无法使用它.
如果您可以直接写入Response流,您可以尝试以下方法:
response.write("<script>");
response.write("window.open('page.html','_blank')");
response.write("</script>");
Run Code Online (Sandbox Code Playgroud)
ste*_*eve 26
通过点击事件处理程序构建您的网址:
string strUrl = "/some/url/path" + myvar;
Run Code Online (Sandbox Code Playgroud)
然后:
ScriptManager.RegisterStartupScript(Page, Page.GetType(), "popup", "window.open('" + strUrl + "','_blank')", true);
Run Code Online (Sandbox Code Playgroud)
小智 13
修复形式技巧很整洁,但是:
您可能无法访问新窗口中加载的代码.
即使你这样做,你依赖于它总是加载,没有错误的事实.
而且你依赖于这样一个事实:在另一个页面有机会加载并运行fixform之前,用户不会单击另一个按钮.
我建议改为:
OnClientClick="aspnetForm.target ='_blank';setTimeout('fixform()', 500);"
Run Code Online (Sandbox Code Playgroud)
并在同一页面上设置fixform ,如下所示:
function fixform() {
document.getElementById("aspnetForm").target = '';
}
Run Code Online (Sandbox Code Playgroud)
小智 11
您也可以像这样使用代码
ClientScript.RegisterStartupScript(this.Page.GetType(), "",
"window.open('page.aspx','Graph','height=400,width=500');", true);
Run Code Online (Sandbox Code Playgroud)
popup方法会给访问者一个安全的问题..
这是我的简单解决方案:并且无处不在.
<script type="text/javascript">
function targetMeBlank() {
document.forms[0].target = "_blank";
}
</script>
Run Code Online (Sandbox Code Playgroud)
<asp:linkbutton runat="server" ID="lnkbtn1" Text="target me to blank dude" OnClick="lnkbtn1_Click" OnClientClick="targetMeBlank();"/>
Run Code Online (Sandbox Code Playgroud)
<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");
}
Run Code Online (Sandbox Code Playgroud)
资料来源:http://dotnetchris.wordpress.com/2008/11/04/c-aspnet-responseredirect-open-into-new-window/
| 归档时间: |
|
| 查看次数: |
423030 次 |
| 最近记录: |