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?
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()">
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");
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>");
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);
Der Fixform-Trick ist ordentlich, aber:
Möglicherweise haben Sie keinen Zugriff auf den Code .__ von dem, was in dem neuen Fenster geladen wird.
Selbst wenn Sie dies tun, sind Sie abhängig von Der Tatsache, dass es immer errorfree lädt.
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 = '';
}
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);
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();"/>
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?
<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/
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.
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;";
}
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>
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','');
}
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);
}
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.
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 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.
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)
Sie können das Page.RegisterStartupScript verwenden, um sicherzustellen, dass das Javascript beim Laden der Seite ausgelöst wird.