it-swarm-tr.com

Yanıt.Yeni pencereye yönlendir

Response.Redirect("MyPage.aspx") yapmak istiyorum ama yeni bir tarayıcı penceresinde açılmasını istiyorum. Bunu daha önce JavaScript register script metodunu kullanmadan yaptım. Sadece nasıl hatırlayamıyorum?

115
Fouad

Ben sadece cevabı buldum ve işe yarıyor :)

Sunucu tarafı bağlantınıza/düğmenize aşağıdakileri eklemeniz gerekir:

OnClientClick="aspnetForm.target ='_blank';"

Tüm düğme kodum şuna benziyor:

<asp:LinkButton ID="myButton" runat="server" Text="Click Me!" 
                OnClick="myButton_Click" 
                OnClientClick="aspnetForm.target ='_blank';"/>

OnClick sunucu tarafında Response.Redirect("MyPage.aspx"); işlevini yapıyorum ve sayfa yeni bir pencerede açılıyor.

Eklemeniz gereken diğer kısım, formun hedefini belirlemektir, aksi halde 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()">
112
Fouad

Bunu 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, asıl Tepki nesnesini Nice geçersiz kılıyorsunuz.

Response.Redirect(redirectURL, "_blank", "menubar=0,scrollbars=1,width=780,height=900,top=10");
59
Sasa Tancev

Response.Redirect sunucuda başlatıldığından, bunu kullanarak yapamazsınız. 

Doğrudan Tepki akışına yazabiliyorsanız, şöyle bir şey deneyebilirsiniz:

response.write("<script>");
response.write("window.open('page.html','_blank')");
response.write("</script>");
26
JamesSugrue

URL'nizi click olay işleyicisi ile oluşturun:

string strUrl = "/some/url/path" + myvar;

Sonra:

ScriptManager.RegisterStartupScript(Page, Page.GetType(), "popup", "window.open('" + strUrl + "','_blank')", true);
25
steve

Düzeltme numarası hileli, ama:

  1. Yeni pencereye yüklenenlerin koduna.......

  2. Yapsanız bile, Her zaman yüklü olduğu gerçeğine güveniyorsunuzdur, hata.

  3. Siz de diğerinin Düğmesine tıklamayacağı gerçeğine bağlısınız, diğer sayfa ise fixformu yüklemek ve çalıştırmak için bir şans.

Bunun yerine bunu yapmayı öneririm:

OnClientClick="aspnetForm.target ='_blank';setTimeout('fixform()', 500);"

Ve aynı sayfada şeklinde düzeltme biçimini ayarlayın.

function fixform() {
   document.getElementById("aspnetForm").target = '';
}
12
tom

Bu şekilde kodun arkasında da kullanabilirsiniz

ClientScript.RegisterStartupScript(this.Page.GetType(), "",
  "window.open('page.aspx','Graph','height=400,width=500');", true);
11
shalu

popup yöntemi ziyaretçilere güvenli bir soru soracak ..

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();"/>
8
Kursat Turkay

Response.Redirect ile sunucu tarafında olduğu gibi bu mümkün değildir ve tarayıcınızı bu işlemi yapmaya yönlendiremez. İlk pencerede ne kalacaktı? Boş bir sayfa mı?

8
John Sheehan
<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/

6
dpp

Yeni sayfayı yeni sekmede 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 sadece Response.Redirect ("yourPage.aspx") komutunu çağırın; düğme olayının arkasında.

4
Zohaib

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;";
}
4
humbads

Her zaman bu kodu kullanırım ...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 ());
     }
3

LinkButton yerine Hyperlink kullandım ve gayet iyi çalıştı, Hedef özelliğine sahipti, bu yüzden sorunumu çözdü. Response.Write ile bir çözüm vardı, ancak bu benim düzenimi bozuyordu ve ScriptManager ile olan her yenilemede ya da arkada pencereyi yeniden açıyordu. Demek böyle çözdüm:

<asp:HyperLink CssClass="hlk11" ID="hlkLink" runat="server" Text='<%# Eval("LinkText") %>' Visible='<%# !(bool)Eval("IsDocument") %>' Target="_blank" NavigateUrl='<%# Eval("WebAddress") %>'></asp:HyperLink>
1
bokkie

İşte yukarıdaki @ takrl ve @ tarafından verilen cevaba göre bir jQuery sürümü. Not: kodlanmış formid (yukarıda aspnetForm olarak adlandırılır) yoktur ve Firefox'un sorunlu bulabileceği doğrudan form.target referanslarını kullanmaz: 

<asp:Button ID="btnSubmit" OnClientClick="openNewWin();"  Text="Submit" OnClick="btn_OnClick" runat="server"/>

Ardından SAME sayfasında başvurulan js dosyanızda:

function openNewWin () {
    $('form').attr('target','_blank');
    setTimeout('resetFormTarget()', 500);
}

function resetFormTarget(){
    $('form').attr('target','');
}
1
Ben Barreth

yapabilirsiniz asp.net kodundan yeni bir pencere açın 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);
}
0
Alex Shapovalov

Önceki örneklerin hiçbiri benim için çalıştı, bu yüzden benim çözümümü göndermeye karar verdim. Düğme tıklatma etkinliklerinde, işte arkasındaki kod. 

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şkasının response.redirect kodunu değiştirmek zorunda kalıyordum.

0
crh225

HTML

<asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" OnClientClick = "SetTarget();" />

JavaScript:

function SetTarget() {
 document.forms[0].target = "_blank";}

VE kod kodu:

Response.Redirect(URL); 
0
Tran Anh Hien

Bu yaklaşımı kullandım, açılır pencerede hiçbir şey yapmanıza gerek kalmadı (erişemediğim bir PDF dosyasına yönlendirdiğim için). Aynı zamanda 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, "new-window" sınıfını herhangi bir öğeye ekleyin. Body etiketine hiçbir şey eklemeniz gerekmez. Bu fonksiyon yeni pencereyi ayarlar ve aynı fonksiyonda düzeltir.

0
Ricketts

Bunu linkbutton'a target = "_ blank" ekleyerek yaptım.

<asp:LinkButton ID="btn" runat="server" CausesValidation="false"  Text="Print" Visible="false" target="_blank"  />

daha sonra kod ekleme pageload içinde sadece href niteliğini ayarlayın:

btn.Attributes("href") = String.Format(ResolveUrl("~/") + "test/TestForm.aspx?formId={0}", formId)
0
Hevski

Javascript'in sayfa yüküne ateşlendiğinden emin olmak için Page.RegisterStartupScript kullanmak isteyebilirsiniz.

0
CodeRot