Response.Redirect to new window

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)

  • 不,因为这使用javascript来更改表单的目标.而是页面将正常提交. (2认同)

小智 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)

  • 这项工作,但随后是我的按钮得到改变的页面,它像CSS或DIVS一样受到影响. (3认同)

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)

  • 此示例中的window.open将始终被视为'popup',因为它是由代码而不是用户操作启动的.如果在用户点击元素时调用window.open,则应该回避浏览器阻止的弹出操作. (3认同)

小智 13

修复形式技巧很整洁,但是:

  1. 您可能无法访问新窗口中加载的代码.

  2. 即使你这样做,你依赖于它总是加载,没有错误的事实.

  3. 而且你依赖于这样一个事实:在另一个页面有机会加载并运行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)

  • 这对我来说很好,基本上是上面的Abhishek Shrivastava解决方案的简短版本.但是,有一些需要注意的注意事项.首先,这将触发弹出窗口阻止程序.特别是,如果弹出窗口阻止程序已启用,它将无法在Safari 5.0中运行,因为Safari不会提示您阻止弹出窗口,也不允许您进行弹出窗口异常.其次,Chrome会忽略window.open的页面参数.因此,即使你使用`window.open('page.aspx','_ blank');`它仍会在新窗口中打开它,导航栏被禁用,导航按钮缺失而不是新标签. (2认同)

Joh*_*han 8

Response.Redirect无法实现这一点,因为它发生在服务器端,无法指示您的浏览器采取该操作.初始窗口会留下什么?一个空白页?


Kur*_*kay 8

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)


dpp*_*dpp 6

<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/