Ich möchte eine Response.Redirect("MyPage.aspx")
aber in einem neuen Browserfenster öffnen lassen. Ich habe das schon einmal gemacht, ohne die JavaScript-Registerskript-Methode zu verwenden. Ich kann mich nur nicht erinnern, wie?
Antworten
Zu viele Anzeigen?Ich habe gerade die Antwort gefunden und es funktioniert :)
Sie müssen Ihrem serverseitigen Link/Button Folgendes hinzufügen:
OnClientClick="aspnetForm.target ='_blank';"
Mein gesamter Schaltflächencode sieht ungefähr so aus:
<asp:LinkButton ID="myButton" runat="server" Text="Click Me!"
OnClick="myButton_Click"
OnClientClick="aspnetForm.target ='_blank';"/>
In der serverseitigen OnClick-Anweisung führe 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, ist das Ziel des Formulars zu fixieren, da sonst jeder Link in einem neuen Fenster geöffnet wird. Fügen Sie dazu Folgendes in die Kopfzeile Ihres POPUP-Fensters ein.
<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()">
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 einen netten Override auf das eigentliche Response-Objekt
Response.Redirect(redirectURL, "_blank", "menubar=0,scrollbars=1,width=780,height=900,top=10");
Der Trick mit der festen Form ist ganz nett, aber:
-
Sie haben möglicherweise keinen Zugang zu dem Code was in dem neuen Fenster geladen wird.
-
Selbst wenn Sie das tun, sind Sie abhängig von dass es immer fehlerfrei lädt. frei.
-
Und Sie verlassen sich auf die Tatsache, dass dass der Benutzer nicht auf ein anderes Schaltfläche klickt, bevor die andere Seite eine die Möglichkeit hat, Fixform zu laden und auszuführen.
Ich würde vorschlagen, stattdessen dies zu tun:
OnClientClick="aspnetForm.target ='_blank';setTimeout('fixform()', 500);"
Und richten Sie fixform auf dem gleiche Seite und sieht so aus:
function fixform() {
document.getElementById("aspnetForm").target = '';
}
- See previous answers
- Weitere Antworten anzeigen