Yanıtlar:
Cevabı yeni buldum ve işe yarıyor :)
Aşağıdakileri sunucu tarafı bağlantınıza / düğmenize eklemeniz gerekir:
OnClientClick="aspnetForm.target ='_blank';"
Tüm düğme kodum şuna benzer:
<asp:LinkButton ID="myButton" runat="server" Text="Click Me!"
OnClick="myButton_Click"
OnClientClick="aspnetForm.target ='_blank';"/>
Sunucu tarafında OnClick a yapıyorum Response.Redirect("MyPage.aspx");
ve sayfa yeni bir pencerede açılıyor.
Eklemeniz gereken diğer kısım, formun hedefini düzeltmektir, aksi takdirde her bağlantı yeni bir pencerede açılır. Bunu yapmak için aşağıdakileri POPUP pencerenizin başlığına ekleyin.
<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>
ve
<body onload="fixform()">
OnClientClick="aspnetForm.target ='_blank';"
kullanmak zorunda kaldımOnClientClick="document.getElementById('Form').target ='_blank';"
Bunu bir uzatma yöntemi olarak kullanabilirsiniz
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);
}
}
}
Bununla, gerçek Response nesnesinde hoş bir geçersiz kılma elde edersiniz
Response.Redirect(redirectURL, "_blank", "menubar=0,scrollbars=1,width=780,height=900,top=10");
Response.Redirect sunucuda başlatıldığı için bunu kullanarak yapamazsınız.
Doğrudan Yanıt akışına yazabiliyorsanız, aşağıdaki gibi bir şey deneyebilirsiniz:
response.write("<script>");
response.write("window.open('page.html','_blank')");
response.write("</script>");
URL'nizi tıklama etkinliği işleyicisiyle oluşturun:
string strUrl = "/some/url/path" + myvar;
Sonra:
ScriptManager.RegisterStartupScript(Page, Page.GetType(), "popup", "window.open('" + strUrl + "','_blank')", true);
Fixform hilesi düzgün, ancak:
Yeni pencerede yüklenenlerin koduna erişiminiz olmayabilir.
Yapsanız bile, her zaman hatasız olarak yükleneceği gerçeğine bağlısınız.
Ve diğer sayfanın fixform'u yükleme ve çalıştırma şansı elde etmeden önce kullanıcının başka bir düğmeyi tıklamayacağı gerçeğine bağlısınız.
Bunun yerine şunu yapmanızı öneririm:
OnClientClick="aspnetForm.target ='_blank';setTimeout('fixform()', 500);"
Ve aynı sayfada aşağıdaki gibi görünen bir düzeltme formu kurun :
function fixform() {
document.getElementById("aspnetForm").target = '';
}
Bu şekilde arkasındaki kodda da kullanabilirsiniz
ClientScript.RegisterStartupScript(this.Page.GetType(), "",
"window.open('page.aspx','Graph','height=400,width=500');", true);
window.open('page.aspx','_blank');
, gezinme çubuğu devre dışı bırakılmış ve yeni bir sekme yerine gezinme düğmeleri eksik olan yeni bir pencerede açılır.
Bu, Response.Redirect ile sunucu tarafında gerçekleştiği için mümkün değildir ve tarayıcınızı bu işlemi yapması için yönlendiremez. İlk pencerede ne kalır? Boş bir sayfa mı?
pop-up yöntemi ziyaretçiye güvenli bir soru verecektir ..
işte benim basit çözümüm: ve her yerde çalışmak.
<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");
}
Kaynak: http://dotnetchris.wordpress.com/2008/11/04/c-aspnet-responseredirect-open-into-new-window/
Kodunuzu geri göndermenize gerek kalmayacak şekilde yeniden yapılandırabilirseniz, bu kodu düğmenin PreRender etkinliğinde kullanabilirsiniz:
protected void MyButton_OnPreRender(object sender, EventArgs e)
{
string URL = "~/MyPage.aspx";
URL = Page.ResolveClientUrl(URL);
MyButton.OnClientClick = "window.open('" + URL + "'); return false;";
}
Yeni sekmede yeni sayfa açmak için aşağıdaki kodu da kullanabilirsiniz.
<asp:Button ID="Button1" runat="server" Text="Go"
OnClientClick="window.open('yourPage.aspx');return false;"
onclick="Button3_Click" />
Ve Response.Redirect ("yourPage.aspx") çağırın; düğme olayının arkasında.
Ben her zaman bu kodu kullanıyorum ... Bu kodu kullan
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 ());
}
İşte yukarıdaki @takrl ve @tom yanıtına dayalı bir jQuery sürümü. Not: sabit kodlanmış formid (yukarıda aspnetForm olarak adlandırılmıştır) yoktur ve ayrıca Firefox'un sorunlu bulabileceği doğrudan form.target referanslarını da kullanmaz:
<asp:Button ID="btnSubmit" OnClientClick="openNewWin();" Text="Submit" OnClick="btn_OnClick" runat="server"/>
Ardından, AYNI sayfasında referans verilen js dosyanızda:
function openNewWin () {
$('form').attr('target','_blank');
setTimeout('resetFormTarget()', 500);
}
function resetFormTarget(){
$('form').attr('target','');
}
LinkButton yerine Hyperlink kullandım ve gayet iyi çalıştı, Target özelliğine sahip, bu yüzden sorunumu çözdü. Response.Write ile bir çözüm vardı ama bu benim düzenimi bozuyordu ve ScriptManager ile olan her yenilemede veya geri pencereyi yeniden açıyordu. İşte bu şekilde çözdüm:
<asp:HyperLink CssClass="hlk11" ID="hlkLink" runat="server" Text='<%# Eval("LinkText") %>' Visible='<%# !(bool)Eval("IsDocument") %>' Target="_blank" NavigateUrl='<%# Eval("WebAddress") %>'></asp:HyperLink>
Eğer yapabilirsiniz arkasında asp.net kodundan yeni bir pencere açmak Burada yaptığım gibi ajax kullanarak 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);
}
Önceki örneklerin hiçbiri benim için işe yaramadı, bu yüzden çözümümü göndermeye karar verdim. Düğme tıklama olaylarında, arkasındaki kod burada verilmiştir.
Dim URL As String = "http://www.google/?Search=" + txtExample.Text.ToString
URL = Page.ResolveClientUrl(URL)
btnSearch.OnClientClick = "window.open('" + URL + "'); return false;"
Yeni bir tarayıcıda açmak için başka birinin yanıtını değiştirmek zorunda kalıyordum. Yeniden yönlendirme kodu.
Bu yaklaşımı kullandım, pop-up'ta herhangi bir şey yapmanızı gerektirmiyor (bir PDF dosyasına yönlendiriyordum çünkü buna erişimim yoktu). Ayrıca sınıfları kullanır.
$(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);
});
});
Kullanmak için herhangi bir elemana "new-window" sınıfını ekleyin. Gövde etiketine herhangi bir şey eklemenize gerek yoktur. Bu işlev, yeni pencereyi kurar ve aynı işlevde düzeltir.
Bunu, bağlantı düğmesine target = "_ blank" koyarak yaptım
<asp:LinkButton ID="btn" runat="server" CausesValidation="false" Text="Print" Visible="false" target="_blank" />
daha sonra codebehind pageload'da href özelliğini ayarlayın:
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";}
VE kod arkasında:
Response.Redirect(URL);