Respuesta.Redirecto a una nueva ventana

Quiero hacer un Response.Redirect("MyPage.aspx") pero lo tengo abierto en una nueva ventana del navegador. He hecho esto antes sin usar el método de script de registro de JavaScript. Simplemente no puedo recordar cómo?

    Acabo de encontrar la respuesta y funciona 🙂

    Debe agregar lo siguiente a su enlace / botón del servidor:

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

    Todo el código de mi botón tiene el siguiente aspecto:

      

    En el lado del servidor OnClick hago un Response.Redirect("MyPage.aspx"); y la página se abre en una nueva ventana.

    La otra parte que necesita agregar es arreglar el destino del formulario; de lo contrario, cada enlace se abrirá en una nueva ventana. Para hacerlo, agregue lo siguiente en el encabezado de su ventana POPUP.

      

    y

      

    Puedes usar esto como método de extensión

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

    Con esto obtienes una buena anulación en el objeto de respuesta real

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

    Como Response.Redirect se inicia en el servidor, no puede hacerlo utilizando eso.

    Si puede escribir directamente en la secuencia de respuesta, puede intentar algo como:

     response.write(""); 

    Construya su url mediante el controlador de eventos click:

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

    Entonces:

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

    El truco de Fixform es limpio, pero:

    1. Es posible que no tenga acceso al código de lo que se carga en la nueva ventana.

    2. Incluso si lo hace, depende del hecho de que siempre se carga, sin errores.

    3. Y depende del hecho de que el usuario no haga clic en otro botón antes de que la otra página tenga la oportunidad de cargar y ejecutar el formulario.

    Sugeriría hacer esto en su lugar:

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

    Y configure fixform en la misma página , con el siguiente aspecto:

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

    También puedes usar el código detrás de esta manera

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

    Esto no es posible con Response.Redirect, ya que ocurre en el lado del servidor y no puede dirigir su navegador para que realice esa acción. ¿Qué quedaría en la ventana inicial? Una página en blanco?

    El método emergente le dará una pregunta segura al visitante.

    aquí está mi solución simple: y trabajando en todas partes.

      

      
      protected void btnNewEntry_Click(object sender, EventArgs e) { Response.Redirect("New.aspx"); } 

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

    Si puede volver a estructurar su código para que no necesite devolverlo, puede usar este código en el evento PreRender del botón:

     protected void MyButton_OnPreRender(object sender, EventArgs e) { string URL = "~/MyPage.aspx"; URL = Page.ResolveClientUrl(URL); MyButton.OnClientClick = "window.open('" + URL + "'); return false;"; } 

    También puede usar el siguiente código para abrir una página nueva en una pestaña nueva.

      

    Y simplemente llame a Response.Redirect (“yourPage.aspx”); detrás del evento del botón.

    Siempre uso este código … Use este código

     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 (""); clientScript.RegisterClientScriptBlock (clientScriptType, clientScriptName, sb.ToString ()); } 

    Aquí hay una versión de jQuery basada en la respuesta de @takrl y @tom anterior. Nota: no hay formid codificado (llamado aspnetForm arriba) y tampoco usa referencias directas de form.target que Firefox puede encontrar problemáticas:

      

    Luego en su archivo js referenciado en la MISMA página:

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

    Usé Hyperlink en lugar de LinkButton y funcionó bien, tiene la propiedad Target por lo que resolvió mi problema. Estaba la solución con Response.Write, pero eso estaba estropeando mi diseño, y el que tenía ScriptManager, en cada actualización o respaldo, volvía a abrir la ventana. Así que así es como lo resolví:

      

    Es posible que desee utilizar Page.RegisterStartupScript para asegurarse de que se active el javascript en la página.

    puedes abrir una nueva ventana desde el código asp.net detrás de usar ajax como hice aquí 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); } 

    Ninguno de los ejemplos anteriores funcionó para mí, así que decidí publicar mi solución. En el botón haga clic en eventos, aquí está el código detrás.

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

    Tenía que modificar la respuesta de otra persona. Código directo para abrir en un nuevo navegador.

    Usé este enfoque, no requiere que hagas nada en la ventana emergente (a la que no tuve acceso porque estaba redireccionando a un archivo PDF). También usa clases.

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

    Para usar, agrega la clase “nueva ventana” a cualquier elemento. No necesita agregar nada a la etiqueta corporal. Esta función configura la nueva ventana y la arregla en la misma función.

    Hice esto poniendo target = “_ blank” en el botón de enlace

      

    luego, en la página de código subyacente simplemente configura el atributo href:

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

    HTML

      

    Javascript:

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

    Y codebehind:

     Response.Redirect(URL);