it-swarm.com.de

Response.Redirect to new window

Ich möchte eine Response.Redirect("MyPage.aspx") machen, aber in einem neuen Browserfenster öffnen. Ich habe dies zuvor ohne die JavaScript-Register-Skriptmethode ausgeführt. Ich kann mich einfach nicht erinnern wie?

115
Fouad

Ich habe gerade die Antwort gefunden und es funktioniert :)

Sie müssen der serverseitigen Verknüpfung/Schaltfläche Folgendes hinzufügen:

OnClientClick="aspnetForm.target ='_blank';"

Mein gesamter Tastencode sieht ungefähr so ​​aus:

<asp:LinkButton ID="myButton" runat="server" Text="Click Me!" 
                OnClick="myButton_Click" 
                OnClientClick="aspnetForm.target ='_blank';"/>

Auf der Serverseite OnClick mache ich eine Response.Redirect("MyPage.aspx"); und die Seite wird in einem neuen Fenster geöffnet.

Der andere Teil, den Sie hinzufügen müssen, besteht darin, das Ziel des Formulars zu fixieren. Fügen Sie dazu in der Kopfzeile Ihres POPUP-Fensters Folgendes hinzu:.

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

und

<body onload="fixform()">
112
Fouad

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 Nice-Überschreibung für das eigentliche Response-Objekt

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

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

Wenn Sie direkt in den Response-Stream schreiben können, können Sie Folgendes versuchen:

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

Konstruieren Sie Ihre URL mit einem Click-Event-Handler:

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

Dann:

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

Der Fixform-Trick ist ordentlich, aber:

  1. Möglicherweise haben Sie keinen Zugriff auf den Code .__ von dem, was in dem neuen Fenster geladen wird.

  2. Selbst wenn Sie dies tun, sind Sie abhängig von Der Tatsache, dass es immer errorfree lädt.

  3. Und Sie sind davon abhängig, dass , Dass der Benutzer nicht auf eine andere -Schaltfläche klickt, bevor die andere Seite die -Chance hat, Fixform zu laden und auszuführen.

Ich würde stattdessen vorschlagen, dies zu tun:

OnClientClick="aspnetForm.target ='_blank';setTimeout('fixform()', 500);"

Und richten Sie ein Fixformular auf der gleichen Seite ein, das folgendermaßen aussieht:

function fixform() {
   document.getElementById("aspnetForm").target = '';
}
12
tom

Sie können auch auf diese Weise hinterher Code verwenden

ClientScript.RegisterStartupScript(this.Page.GetType(), "",
  "window.open('page.aspx','Graph','height=400,width=500');", true);
11
shalu

popup-Methode gibt dem Besucher eine sichere Frage.

hier ist meine einfache Lösung: und überall arbeiten.

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

Dies ist bei Response.Redirect nicht möglich, da dies auf der Serverseite geschieht und der Browser nicht dazu aufgefordert werden kann. Was bleibt im Anfangsfenster? Eine leere Seite?

8
John Sheehan
<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");
}

Quelle: http://dotnetchris.wordpress.com/2008/11/04/c-aspnet-responseredirect-open-into-new-window/

6
dpp

Sie können auch den folgenden Code verwenden, um eine neue Seite in einer neuen Registerkarte 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") an. hinter dem Button-Event.

4
Zohaib

Wenn Sie Ihren Code so umstrukturieren können, dass kein Postback erforderlich ist, 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;";
}
4
humbads

Ich verwende immer diesen Code ...Verwenden Sie 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 habe Hyperlink anstelle von LinkButton verwendet und es hat gut funktioniert, es hat die Eigenschaft Target, so dass es mein Problem gelöst hat. Es gab die Lösung mit Response.Write, aber das hat mein Layout durcheinander gebracht, und die mit ScriptManager, bei jeder Aktualisierung oder Zurück, öffnete das Fenster. 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>
1
bokkie

Hier ist eine jQuery-Version, die auf der Antwort von @takrl und @tom basiert. Hinweis: Keine fest codierte Form-ID (oben aspnetForm genannt) und verwendet auch keine direkten Verweise auf form.target, die Firefox als problematisch empfinden könnte: 

<asp:Button ID="btnSubmit" OnClientClick="openNewWin();"  Text="Submit" OnClick="btn_OnClick" runat="server"/>

Dann in Ihrer JS-Datei, die auf der SAME-Seite referenziert wird:

function openNewWin () {
    $('form').attr('target','_blank');
    setTimeout('resetFormTarget()', 500);
}

function resetFormTarget(){
    $('form').attr('target','');
}
1
Ben Barreth

sie können öffnen Sie ein neues Fenster von asp.net Code dahinter Ajax verwenden, wie ich es hier getan habe http://alexandershapovalov.com/open-new-window-from-code-behind-in- aspnet-68 /

protected void Page_Load(object sender, EventArgs e)
{
    Calendar1.SelectionChanged += CalendarSelectionChanged;
}

private void CalendarSelectionChanged(object sender, EventArgs e)
{
    DateTime selectedDate = ((Calendar) sender).SelectedDate;
    string url = "HistoryRates.aspx?date="
+ HttpUtility.UrlEncode(selectedDate.ToShortDateString());
    ScriptManager.RegisterClientScriptBlock(this, GetType(),
"rates" + selectedDate, "openWindow('" + url + "');", true);
}
0
Alex Shapovalov

Keines der vorherigen Beispiele funktionierte für mich, also entschied ich mich, meine Lösung zu posten. In den Schaltflächenklickereignissen befindet sich der Code dahinter. 

Dim URL As String = "http://www.google/?Search=" + txtExample.Text.ToString
URL = Page.ResolveClientUrl(URL)
btnSearch.OnClientClick = "window.open('" + URL + "'); return false;"

Ich musste den response.redirect-Code eines anderen Benutzers ändern, um ihn in einem neuen Browser zu öffnen.

0
crh225

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); 
0
Tran Anh Hien

Ich habe diesen Ansatz verwendet, es ist nicht erforderlich, dass Sie irgendetwas im Popup vornehmen (auf das ich keinen Zugriff hatte, da ich zu einer PDF -Datei umgeleitet wurde). 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);
    });
});

Fügen Sie zu jedem Element die Klasse "new-window" hinzu. Sie müssen dem body-Tag nichts hinzufügen. Diese Funktion richtet das neue Fenster ein und fixiert es in derselben Funktion.

0
Ricketts

Ich habe dies gemacht, indem ich im Linkbutton target = "_ blank" gesetzt habe

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

dann setzen Sie in der Codebehind-Seite einfach das href-Attribut:

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

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

0
CodeRot