c# - Response.Redirect zu neuem Fenster




asp.net (14)

Ich möchte ein Response.Redirect("MyPage.aspx") aber es in einem neuen Browserfenster öffnen. Ich habe das schon einmal gemacht, ohne die JavaScript-Skriptmethode zu verwenden. Ich kann mich nicht erinnern, wie?


Construct Ihre URL über Click-Event-Handler:

string strUrl = "/some/url/path" + myvar;

Dann:

ScriptManager.RegisterStartupScript(Page, Page.GetType(), "popup", "window.open('" + strUrl + "','_blank')", true);

Da Response.Redirect auf dem Server initiiert wird, können Sie dies nicht tun.

Wenn Sie direkt in den Antwortstream schreiben können, können Sie Folgendes versuchen:

response.write("<script>");
response.write("window.open('page.html','_blank')");
response.write("</script>");

Dies ist mit Response.Redirect nicht möglich, da es auf der Serverseite passiert und es Ihrem Browser nicht erlaubt, diese Aktion auszuführen. Was wäre im ersten Fenster übrig? Eine leere Seite?


HTML

<asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" OnClientClick = "SetTarget();" />

Javascript:

function SetTarget() {
 document.forms[0].target = "_blank";}

UND codebehind:

Response.Redirect(URL); 

Ich benutze immer diesen Code ... Benutze diesen Code

String clientScriptName = "ButtonClickScript";
Type clientScriptType = this.GetType ();

// Get a ClientScriptManager reference from the Page class.
ClientScriptManager clientScript = Page.ClientScript;

// Check to see if the client script is already registered.
if (!clientScript.IsClientScriptBlockRegistered (clientScriptType, clientScriptName))
    {
     StringBuilder sb = new StringBuilder ();
     sb.Append ("<script type='text/javascript'>");
     sb.Append ("window.open(' " + url + "')"); //URL = where you want to redirect.
     sb.Append ("</script>");
     clientScript.RegisterClientScriptBlock (clientScriptType, clientScriptName, sb.ToString ());
     }

Ich benutzte Hyperlink anstelle von LinkButton und es funktionierte gut, es hat die Target-Eigenschaft, so dass es mein Problem gelöst hat. Es gab die Lösung mit Response.Write, aber das war mein Layout verderben, und das mit ScriptManager, bei jeder Aktualisierung oder zurück war das Fenster wieder öffnen. So habe ich es gelöst:

<asp:HyperLink CssClass="hlk11" ID="hlkLink" runat="server" Text='<%# Eval("LinkText") %>' Visible='<%# !(bool)Eval("IsDocument") %>' Target="_blank" NavigateUrl='<%# Eval("WebAddress") %>'></asp:HyperLink>

Ich habe diesen Ansatz verwendet, es erfordert nicht, dass Sie etwas in dem Popup tun (auf das ich keinen Zugriff hatte, weil ich auf eine PDF-Datei umgeleitet habe). Es verwendet auch Klassen.

$(function () {
    //--- setup click event for elements that use a response.redirect in code behind but should open in a new window
    $(".new-window").on("click", function () {

        //--- change the form's target
        $("#aspnetForm").prop("target", "_blank");

        //--- change the target back after the window has opened
        setTimeout(function () {
            $("#aspnetForm").prop("target", "");
        }, 1);
    });
});

Um zu verwenden, fügen Sie die Klasse "neues Fenster" zu irgendeinem Element hinzu. Sie müssen dem body-Tag nichts hinzufügen. Diese Funktion richtet das neue Fenster ein und behebt es in der gleichen Funktion.


Ich tat dies, indem ich target = "_ blank" in den Linkbutton setzte

<asp:LinkButton ID="btn" runat="server" CausesValidation="false"  Text="Print" Visible="false" target="_blank"  />

dann im pageload von codebehind einfach das Attribut href setzen:

btn.Attributes("href") = String.Format(ResolveUrl("~/") + "test/TestForm.aspx?formId={0}", formId)

Popup-Methode wird dem Besucher eine sichere Frage stellen.

Hier ist meine einfache Lösung: und arbeiten alle hier.

<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();"/>

Sie können das Page.RegisterStartupScript verwenden, um sicherzustellen, dass das JavaScript beim Laden der Seite ausgelöst wird.


Sie können den folgenden Code auch verwenden, um eine neue Seite in einem neuen Tab zu öffnen.

<asp:Button ID="Button1" runat="server" Text="Go" 
  OnClientClick="window.open('yourPage.aspx');return false;" 
  onclick="Button3_Click" />

Und rufen Sie einfach Response.Redirect ("yourPage.aspx"); hinter Knopf Ereignis.


Sie können dies als Erweiterungsmethode verwenden

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); 
        } 
    }
}

Damit erhalten Sie eine schöne Überschreibung für das eigentliche Response-Objekt

Response.Redirect(redirectURL, "_blank", "menubar=0,scrollbars=1,width=780,height=900,top=10");

Wenn Sie Ihren Code so umstrukturieren können, dass Sie kein Postback mehr benötigen, können Sie diesen Code im PreRender-Ereignis der Schaltfläche verwenden:

protected void MyButton_OnPreRender(object sender, EventArgs e)
{
    string URL = "~/MyPage.aspx";
    URL = Page.ResolveClientUrl(URL);
    MyButton.OnClientClick = "window.open('" + URL + "'); return false;";
}





response.redirect