Como fazer o Response.Redirect abrir uma nova janela

O objetivo do artigo é mostrar como fazer para o método Response.Redirect abrir a página passada em uma nova aba usando métodos de extensão.

Primeiro vamos falar sobre o Response.Redirect. O código simplesmente envia uma mensagem ao navegador informando para ele mover para uma outra página ou um outro site. Simples assim. A implementação nativa dos navegadores interpreta o código e envia para o usuário. Com isso, para abrirmos uma pagina em outra janela normalmente utilizamos javascript ou hiperlinks.

Segue exemplo de javascript abaixo:

<script type=”text/javascript”> Window.open(“yyyy.aspx”); </script>

Agora faremos uma pausa na parte de chamadas a paginas e falaremos de um recurso que surgiu no C# 3.0. Os métodos de extensão. Com eles podemos adicionar métodos para tipos existentes sem criar um novo tipo derivado, recompilar ou modificar o tipo original. É um tipo especial de método estático, porém são chamados como se fossem métodos de instancia no tipo estendido. Após essa breve descrição, vamos a um exemplo bem simples para demonstrar

Criei a classe abaixo. Ela possui um único método.

public static class MetodosExtensao { /// <summary> /// Metodo que usa a propria string como parametro para mascarar uma variavel Cpf /// </summary> /// <param name="pTexto"></param> /// <returns>Retorna uma string no formato desejado</returns> public static string MascaraCpf(this string pTexto) { string vRetorno = ""; vRetorno = pTexto.Substring(0, 3) + "." + pTexto.Substring(3, 3) + "." + pTexto.Substring(6, 3) + "-" + pTexto.Substring(9, 2); return vRetorno; } }

Agora o tipo string possui um método chamado MascaraCpf. Esse é um pequeno exemplo apenas para mostrar o que é um método de extensão. Repare na passagem do parâmetro. É importante falar que isso define o tipo que vai chamar o nosso método. Ou seja, podemos fazer algo do tipo:

String x = “12345678912”; String v = x. MascaraCpf();

O resultado da variável v é: 123.456.789-12.

Vamos começar a montar um método de extensão que crie uma “sobrecarga” do método Redirect.

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("""", """", """");"; } else { script = @"window.open("""", """");"; } script = String.Format(script, url, target, windowFeatures); ScriptManager.RegisterStartupScript(page, typeof(Page), "Redirect", script, true); } } }

Vamos as explicações do método acima.

O método é void pois não retorna nada. Nele eu faço a chamada para a pagina passada por parâmetro. O primeiro IF verifica se faço a chamada normal ou se usaremos a sobrecarga.

Após ver qual é a chamada correta de acordo com os parâmetros passado, crio meu script para criar a outra pagina.

Para utilizar o método acima basta:

Response.Redirect("popup.aspx", "_blank", "menubar=0,width=100,height=100");
Ebook exclusivo
Dê um upgrade no início da sua jornada. Crie sua conta grátis e baixe o e-book

Artigos relacionados