Jawaban:
Saya baru saja menemukan jawabannya dan berhasil :)
Anda perlu menambahkan yang berikut ini ke tautan / tombol sisi server Anda:
OnClientClick="aspnetForm.target ='_blank';"
Seluruh kode tombol saya terlihat seperti ini:
<asp:LinkButton ID="myButton" runat="server" Text="Click Me!"
OnClick="myButton_Click"
OnClientClick="aspnetForm.target ='_blank';"/>
Di sisi server OnClick saya lakukan Response.Redirect("MyPage.aspx");
dan halaman dibuka di jendela baru.
Bagian lain yang perlu Anda tambahkan adalah memperbaiki target formulir jika tidak, setiap tautan akan terbuka di jendela baru. Untuk melakukannya, tambahkan baris berikut di header jendela POPUP Anda.
<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>
dan
<body onload="fixform()">
OnClientClick="aspnetForm.target ='_blank';"
saya harus menggunakanOnClientClick="document.getElementById('Form').target ='_blank';"
Anda dapat menggunakan ini sebagai metode ekstensi
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);
}
}
}
Dengan ini Anda mendapatkan penggantian yang bagus pada objek Respon yang sebenarnya
Response.Redirect(redirectURL, "_blank", "menubar=0,scrollbars=1,width=780,height=900,top=10");
Karena Response.Redirect dimulai di server, Anda tidak dapat melakukannya menggunakan itu.
Jika Anda dapat menulis langsung ke aliran Respons, Anda dapat mencoba sesuatu seperti:
response.write("<script>");
response.write("window.open('page.html','_blank')");
response.write("</script>");
Susun url Anda melalui click event handler:
string strUrl = "/some/url/path" + myvar;
Kemudian:
ScriptManager.RegisterStartupScript(Page, Page.GetType(), "popup", "window.open('" + strUrl + "','_blank')", true);
Trik fixform memang rapi, tetapi:
Anda mungkin tidak memiliki akses ke kode apa yang dimuat di jendela baru.
Bahkan jika Anda melakukannya, Anda bergantung pada fakta bahwa itu selalu memuat, bebas dari kesalahan.
Dan Anda bergantung pada fakta bahwa pengguna tidak akan mengklik tombol lain sebelum halaman lain mendapat kesempatan untuk memuat dan menjalankan fixform.
Saya akan menyarankan melakukan ini sebagai gantinya:
OnClientClick="aspnetForm.target ='_blank';setTimeout('fixform()', 500);"
Dan atur fixform pada halaman yang sama , terlihat seperti ini:
function fixform() {
document.getElementById("aspnetForm").target = '';
}
Anda juga dapat menggunakan kode di belakang seperti ini
ClientScript.RegisterStartupScript(this.Page.GetType(), "",
"window.open('page.aspx','Graph','height=400,width=500');", true);
window.open('page.aspx','_blank');
, tetap terbuka di jendela baru dengan bilah navigasi dinonaktifkan dan tombol navigasi tidak ada, bukan tab baru.
Ini tidak mungkin dilakukan dengan Response.Redirect seperti yang terjadi di sisi server dan tidak dapat mengarahkan browser Anda untuk melakukan tindakan itu. Apa yang tersisa di jendela awal? Halaman kosong?
metode popup akan memberikan pertanyaan aman kepada pengunjung ..
inilah solusi sederhana saya: dan bekerja di mana-mana.
<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");
}
Sumber: http://dotnetchris.wordpress.com/2008/11/04/c-aspnet-responseredirect-open-into-new-window/
Jika Anda dapat menyusun ulang kode Anda sehingga Anda tidak perlu melakukan postback, maka Anda dapat menggunakan kode ini di acara PreRender tombol:
protected void MyButton_OnPreRender(object sender, EventArgs e)
{
string URL = "~/MyPage.aspx";
URL = Page.ResolveClientUrl(URL);
MyButton.OnClientClick = "window.open('" + URL + "'); return false;";
}
Anda juga dapat menggunakan kode berikut untuk membuka halaman baru di tab baru.
<asp:Button ID="Button1" runat="server" Text="Go"
OnClientClick="window.open('yourPage.aspx');return false;"
onclick="Button3_Click" />
Dan panggil saja Response.Redirect ("yourPage.aspx"); di belakang acara tombol.
Saya selalu menggunakan kode ini ... Gunakan kode ini
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 ());
}
Berikut versi jQuery berdasarkan jawaban oleh @takrl dan @tom di atas. Catatan: tidak ada formid yang di-hardcode (dinamai aspnetForm di atas) dan juga tidak menggunakan referensi form.target langsung yang mungkin dianggap bermasalah oleh Firefox:
<asp:Button ID="btnSubmit" OnClientClick="openNewWin();" Text="Submit" OnClick="btn_OnClick" runat="server"/>
Kemudian di file js anda direferensikan di halaman SAMA:
function openNewWin () {
$('form').attr('target','_blank');
setTimeout('resetFormTarget()', 500);
}
function resetFormTarget(){
$('form').attr('target','');
}
Saya menggunakan Hyperlink daripada LinkButton dan berfungsi dengan baik, ia memiliki properti Target sehingga memecahkan masalah saya. Ada solusi dengan Response.Write tetapi itu mengacaukan tata letak saya, dan yang dengan ScriptManager, di setiap penyegaran atau kembali membuka kembali jendela. Jadi begini cara saya menyelesaikannya:
<asp:HyperLink CssClass="hlk11" ID="hlkLink" runat="server" Text='<%# Eval("LinkText") %>' Visible='<%# !(bool)Eval("IsDocument") %>' Target="_blank" NavigateUrl='<%# Eval("WebAddress") %>'></asp:HyperLink>
Anda dapat membuka jendela baru dari kode asp.net di belakang menggunakan ajax seperti yang saya lakukan di sini 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);
}
Tidak ada contoh sebelumnya yang berhasil untuk saya, jadi saya memutuskan untuk memposting solusi saya. Dalam acara klik tombol, berikut adalah kode di belakangnya.
Dim URL As String = "http://www.google/?Search=" + txtExample.Text.ToString
URL = Page.ResolveClientUrl(URL)
btnSearch.OnClientClick = "window.open('" + URL + "'); return false;"
Saya harus mengubah kode response.redirect orang lain untuk membuka di browser baru.
Saya menggunakan pendekatan ini, tidak mengharuskan Anda melakukan apa pun pada popup (yang tidak saya akses karena saya mengarahkan ke file PDF). Ini juga menggunakan kelas.
$(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);
});
});
Untuk menggunakan, tambahkan kelas "jendela baru" ke elemen apa pun. Anda tidak perlu menambahkan apapun ke tag badan. Fungsi ini menyiapkan jendela baru dan memperbaikinya di fungsi yang sama.
Saya melakukan ini dengan meletakkan target = "_ blank" di tombol tautan
<asp:LinkButton ID="btn" runat="server" CausesValidation="false" Text="Print" Visible="false" target="_blank" />
lalu di pageload codebehind setel atribut href:
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";}
DAN codebehind:
Response.Redirect(URL);