it-swarm-eu.dev

Odpověď. Přesměrovat do nového okna

Chci udělat Response.Redirect("MyPage.aspx") ale nechat to otevřít v novém okně prohlížeče. Udělal jsem to dříve bez použití skriptovací metody JavaScript. Jen si nepamatuju, jak?

115
Fouad

Právě jsem našel odpověď a funguje to :)

Musíte přidat následující odkaz na tlačítko/tlačítko na straně serveru:

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

Celý kód tlačítka vypadá takto:

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

Na straně serveru OnClick I do Response.Redirect("MyPage.aspx"); a stránka se otevře v novém okně.

Další část, kterou potřebujete přidat, je opravit cíl formuláře, jinak se každý odkaz otevře v novém okně. K tomu přidejte následující v záhlaví okna POPUP.

<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>

a

<body onload="fixform()">
112
Fouad

Můžete použít jako metodu rozšíření

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); 
        } 
    }
}

S tímto získáte Nice přepsání na skutečném objektu Response

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

Vzhledem k tomu, Response.Redirect je zahájen na serveru, nemůžete to udělat pomocí. 

Pokud můžete napsat přímo do toku odpovědi, můžete zkusit něco jako:

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

Vytvořte si adresu URL prostřednictvím obslužného programu události kliknutí:

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

Pak:

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

Trik fixform je čistý, ale:

  1. Nesmíte mít přístup k kódu Toho, co se načte v novém okně.

  2. I když to uděláte, jste závislí na Skutečnosti, že se vždy načte, chyba Zdarma.

  3. A vy jste závislí na skutečnosti , Že uživatel neklikne na jiné tlačítko Předtím, než druhá stránka dostane Šanci načíst a spustit fixform.

Místo toho bych navrhl:

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

Nastavit fixform na stejnou stránku , vypadající takto:

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

Můžete také použít v kódu za tímto způsobem

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

vyskakovací metoda poskytne návštěvníkovi bezpečnou otázku.

zde je mé jednoduché řešení: a práce všude.

<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

To není možné s Response.Redirect, jak se to děje na straně serveru a nemůže nasměrovat váš prohlížeč, aby tuto akci provedl. Co by zůstalo v počátečním okně? Prázdná stránka?

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");
}

Zdroj: http://dotnetchris.wordpress.com/2008/11/04/c-aspnet-responseredirect-open-into-new-window/

6
dpp

K otevření nové stránky v nové záložce můžete také použít následující kód.

<asp:Button ID="Button1" runat="server" Text="Go" 
  OnClientClick="window.open('yourPage.aspx');return false;" 
  onclick="Button3_Click" />

A stačí zavolat Response.Redirect ("yourPage.aspx"); za tlačítkem události.

4
Zohaib

Pokud můžete změnit strukturu kódu tak, abyste nemuseli zpětné odeslání, můžete tento kód použít v události PreRender tlačítka:

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

Vždy používám tento kód ... Použijte tento kód 

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

Použil jsem Hyperlink místo LinkButton a fungovalo to v pořádku, má vlastnost Target, takže to vyřešilo můj problém. Tam bylo řešení s Response.Write, ale to bylo pokazit můj layout, a ten s ScriptManager, při každém obnovení nebo zpět bylo znovuotevření okna. Tak jsem to vyřešil:

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

Zde je verze jQuery založená na odpovědi @takrl a @tom výše. Poznámka: žádný formátovaný formid (pojmenovaný aspnetForm výše) a také nepoužívá přímé odkazy form.target, které Firefox může najít problematické: 

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

Potom ve vašem souboru js odkazovaném na stránce SAME:

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

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

můžete otevřít nové okno z asp.net kódu za pomocí ajax, jako jsem to udělal 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

Žádný z předchozích příkladů pro mě nepracoval, tak jsem se rozhodl, že své řešení pošlu. V události kliknutí na tlačítko je zde kód za ním. 

Dim URL As String = "http://www.google/?Search=" + txtExample.Text.ToString
URL = Page.ResolveClientUrl(URL)
btnSearch.OnClientClick = "window.open('" + URL + "'); return false;"

Musel jsem modifikovat kód někoho jiného, ​​aby se otevřel v novém prohlížeči.

0
crh225

Použil jsem tento přístup, nevyžaduje to, abyste na vyskakovacím okně (co jsem neměla přístup, protože jsem přesměroval do souboru PDF) udělal cokoliv. Používá také třídy.

$(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);
    });
});

Chcete-li použít, přidejte třídu "nové okno" do libovolného prvku. Do značky těla nemusíte nic přidávat. Tato funkce nastaví nové okno a opraví ho ve stejné funkci.

0
Ricketts

Udělal jsem to tak, že jsem do linkbuttonu vložil target = "_ blank"

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

pak v codebehind pageload stačí nastavit atribut href:

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

Chcete použít skript Page.RegisterStartupScript, abyste zajistili, že javascript spustí načtení stránky.

0
CodeRot