Antworten:
Ich habe gerade die Antwort gefunden und es funktioniert :)
Sie müssen Ihrem serverseitigen Link / Ihrer serverseitigen Schaltfläche 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';"/>
Auf der Serverseite mache ich OnClick a 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 festzulegen. Andernfalls wird jeder Link in einem neuen Fenster geöffnet. 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()">
OnClientClick="aspnetForm.target ='_blank';"
ichOnClientClick="document.getElementById('Form').target ='_blank';"
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 nette Überschreibung des eigentlichen Antwortobjekts
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 Antwort-Stream schreiben können, können Sie Folgendes ausprobieren:
response.write("<script>");
response.write("window.open('page.html','_blank')");
response.write("</script>");
Konstruieren Sie Ihre URL über den 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, der in das neue Fenster geladen wird.
Selbst wenn Sie dies tun, sind Sie darauf angewiesen, dass es immer fehlerfrei geladen wird.
Und Sie sind darauf angewiesen, dass der Benutzer nicht auf eine andere Schaltfläche klickt, bevor die andere Seite die Möglichkeit erhält, fixform zu laden und auszuführen.
Ich würde stattdessen vorschlagen, dies zu tun:
OnClientClick="aspnetForm.target ='_blank';setTimeout('fixform()', 500);"
Richten Sie das Fixform auf derselben Seite wie folgt ein :
function fixform() {
document.getElementById("aspnetForm").target = '';
}
Sie können auf diese Weise auch Code dahinter verwenden
ClientScript.RegisterStartupScript(this.Page.GetType(), "",
"window.open('page.aspx','Graph','height=400,width=500');", true);
window.open('page.aspx','_blank');
, wird es in einem neuen Fenster mit deaktivierter Navigationsleiste und fehlenden Navigationsschaltflächen anstelle einer neuen Registerkarte geöffnet.
Dies ist mit Response.Redirect nicht möglich, da dies auf der Serverseite geschieht, und kann Ihren Browser nicht anweisen, diese Aktion auszuführen. Was würde im Anfangsfenster übrig bleiben? Eine leere Seite?
Die 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();"/>
<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/
Wenn Sie Ihren Code so umstrukturieren können, dass Sie kein Postback durchführen müssen, 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;";
}
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" />
Rufen Sie einfach Response.Redirect ("yourPage.aspx") auf. Ereignis hinter dem Knopf.
Ich benutze 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 ());
}
Hier ist eine jQuery-Version, die auf der Antwort von @takrl und @tom oben basiert. Hinweis: Keine fest codierte Formid (oben aspnetForm genannt) und verwendet auch keine direkten form.target-Referenzen, die Firefox möglicherweise als problematisch empfindet:
<asp:Button ID="btnSubmit" OnClientClick="openNewWin();" Text="Submit" OnClick="btn_OnClick" runat="server"/>
Dann in Ihrer js-Datei, auf die auf der gleichen Seite verwiesen wird:
function openNewWin () {
$('form').attr('target','_blank');
setTimeout('resetFormTarget()', 500);
}
function resetFormTarget(){
$('form').attr('target','');
}
Ich habe Hyperlink anstelle von LinkButton verwendet und es hat einwandfrei funktioniert. Es hat die Target-Eigenschaft, sodass mein Problem gelöst wurde. Es gab die Lösung mit Response.Write, aber das hat mein Layout durcheinander gebracht, und die mit ScriptManager öffnete bei jeder Aktualisierung oder Zurück das Fenster erneut. 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>
Sie können ein neues Fenster aus dem dahinter liegenden asp.net-Code mit Ajax öffnen, 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 hat für mich funktioniert, daher habe ich beschlossen, meine Lösung zu veröffentlichen. In den Schaltflächenklickereignissen ist hier 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 ändern, um ihn in einem neuen Browser zu öffnen.
Ich habe diesen Ansatz verwendet. Sie müssen im Popup nichts tun (auf das ich keinen Zugriff hatte, weil ich zu einer PDF-Datei umgeleitet habe). Es werden auch Klassen verwendet.
$(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 zur Verwendung jedem Element die Klasse "new-window" hinzu. Sie müssen dem Body-Tag nichts hinzufügen. Diese Funktion richtet das neue Fenster ein und korrigiert es in derselben Funktion.
Ich habe dies getan, indem ich target = "_ blank" in den Linkbutton eingefügt habe
<asp:LinkButton ID="btn" runat="server" CausesValidation="false" Text="Print" Visible="false" target="_blank" />
dann setzen Sie im Codebehind pageload einfach das href-Attribut:
btn.Attributes("href") = String.Format(ResolveUrl("~/") + "test/TestForm.aspx?formId={0}", formId)
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);