Em aplicativos ASP.NET, há muitas maneiras de navegar entre formulários da Web: usando hiperlinks, usando Response.Redirect, usando Server.Transfer ou usando Server.Execute. Este artigo analisará as semelhanças, diferenças e vantagens e desvantagens desses quatro métodos de navegação para ajudá-lo a escolher o melhor método de navegação.
1. Hiperlink
A maneira mais simples de inserir outro formulário a partir de um formulário é usar o controle de hiperlink HTML. Em um formulário da Web, use a classe de código HTML de hiperlinks, como:
<a href="WebForm2.aspx">Enter Form 2</a>
Quando o usuário clica no hiperlink, WebForm2.aspx é executado e o resultado é enviado para o navegador. A navegação por hiperlink pode ser usada em praticamente qualquer lugar, incluindo páginas HTML e páginas ASP comuns. O ASP.NET também fornece outro método alternativo, o controle de servidor HyperLink:
<form id="Form1" method="post" runat="server">
<asp:HyperLink id="HyperLink1" runat=" server"
NavigateUrl="WebForm2 .aspx">Insira o Formulário 2</asp:HyperLink>
</form>
O resultado da execução do código HTML acima é igual ao primeiro exemplo, porque o ASP.NET trata o controle de servidor Web HyperLink como um controle HTML super Link. Mas há uma diferença importante entre os dois. Os controles do servidor Web HyperLink podem ser programados no lado do servidor. Especificamente, sua propriedade NavigateUrl pode ser alterada no código do programa, permitindo a construção de hiperlinks cujos alvos específicos podem mudar dinamicamente com base no estado atual da aplicação, por exemplo:
Private Sub Button1_Click( _
ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles Button1.Click
HyperLink1.NavigateUrl = "WebForm3.aspx"
End Sub
Após a execução deste código, se o usuário clicar no link, ele verá WebForm3.aspx em vez de WebForm2.aspx.
2. Use um programa para controlar o redirecionamento.
Embora os hiperlinks possam navegar de uma página para outra, esse método de navegação é totalmente controlado pelo usuário. Às vezes, podemos precisar usar código para controlar todo o processo de navegação, inclusive quando ir para outra página. Nessas situações, o ASP.NET tem três maneiras diferentes de atingir objetivos semelhantes: chamar o método Redirect do objeto Response e chamar o método Transfer ou Execute do objeto Server. O comportamento destes três métodos de navegação é basicamente semelhante, mas existem diferenças.
2.1 Response.Redirect
O método Response.Redirect faz com que o navegador se vincule a uma URL especificada. Quando o método Response.Redirect() é chamado, ele cria uma resposta com o código de status 302 (indicando que o destino foi alterado) e a nova URL de destino nos cabeçalhos de resposta. O navegador recebe a resposta do servidor e usa as informações no cabeçalho da resposta para emitir uma solicitação para o novo URL.
Ou seja, ao utilizar o método Response.Redirect, a operação de redirecionamento ocorre do lado do cliente e envolve um total de duas comunicações com o servidor (duas ida e volta): a primeira é uma solicitação da página original, que recebe um Resposta 302, e a segunda A segunda vez é solicitar a nova página declarada na resposta 302 e obter a página após o redirecionamento.
2.2 Server.Transfer
O método Server.Transfer transfere o fluxo de execução do arquivo ASPX atual para outra página ASPX no mesmo servidor. Quando Server.Transfer é chamado, a execução da página ASPX atual é encerrada e o fluxo de execução é transferido para outra página ASPX, mas a nova página ASPX ainda usa o fluxo de resposta criado pela página ASPX anterior.
Se você usar o método Server.Transfer para navegar entre as páginas, a URL no navegador não será alterada, pois o redirecionamento é totalmente realizado no lado do servidor e o navegador não sabe que o servidor realizou uma alteração de página.
Por padrão, o método Server.Transfer não passa dados de formulário ou strings de consulta de uma página para outra, mas desde que o segundo parâmetro do método esteja definido como True, os dados do formulário da primeira página podem ser preservados e consultados. corda.
Ao mesmo tempo, uma coisa deve ser observada ao usar Server.Transfer: a página de destino usará o fluxo de resposta criado pela página original, o que faz com que o Machine Authentication Check (MAC) do ASP.NET pense que o ViewState da nova página foi adulterado. Portanto, se desejar reter os dados do formulário e a coleção de cadeias de caracteres de consulta da página original, você deverá definir a propriedade EnableViewStateMac da diretiva Page da página de destino como False.
2.3 Server.Execute
O método Server.Execute permite que a página ASPX atual execute uma página ASPX especificada no mesmo servidor Web. Quando a página ASPX especificada é executada, o fluxo de controle retorna ao local onde a página original emitiu o Server.Execute. chamar.
Este método de navegação de página é semelhante a uma chamada de função para uma página ASPX. A página chamada pode acessar os dados do formulário e a coleção de strings de consulta da página de chamada, portanto, a propriedade EnableViewStateMac do comando Page da página chamada deve ser definida como False.
Por padrão, a saída da página chamada é anexada ao fluxo de resposta atual. No entanto, o método Server.Execute possui um método sobrecarregado que permite que a saída da página chamada seja obtida por meio de um objeto TextWriter (ou seu subobjeto, como um objeto StringWriter), em vez de anexar diretamente ao fluxo de saída, portanto isso na página original Você pode ajustar facilmente a localização dos resultados de saída da página chamada.
Para ilustrar seu processo de trabalho, vamos criar um formulário Web, colocar um controle de botão (Button1) e um controle de texto (Literal1), mudar para a visualização de código na interface de design, adicionar uma instrução Imports do namespace System.IO e em seguida, adicione o código executado quando o usuário clica no botão:
Private Sub Button1_Click( _
ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles Button1.Click
Dim sw As StringWriter = New StringWriter()
Server.Execute( "WebForm2. aspx", sw)
Literal1.Text = sw.ToString()
End Sub
Em seguida, crie uma segunda página WebForm2.aspx para o mesmo aplicativo da web. Vá para a visualização HTML da página e modifique sua diretiva Page para desativar a verificação de ViewState:
<%@ Page Language="vb" AutoEventWireup="false" Codebehind="WebForm2.aspx.vb"
Inherits="Navigate.WebForm2" EnableViewStateMac= "false "%>
Vá para a visualização de design novamente e adicione alguns controles à segunda página. Em seguida, defina a primeira página como padrão e inicie o aplicativo. Clique no botão e o controle do WebForm2 será exibido onde o botão Literal é colocado no WebForm1, conforme mostrado na Figura 1. Observe que o título da página e o URL ainda exibem a página original do WebForm1.
Figura 1: Use Server.Execute para mesclar dois arquivos de origem
Ao usar o método Server.Transfer ou Server.Execute para implementar a navegação, uma coisa a ser observada: a página final pode não ser uma página HTML legal, porque a página finalmente retornou. o cliente pode conter múltiplas tags <HTML> e <BODY>. O Internet Explorer parece tolerar e lidar com essa situação corretamente, mas se você quiser usar outro navegador, é melhor testá-lo com cuidado.
3. Comparação e seleção
Visto que existem tantas maneiras de navegar de uma página para outra, como você deve escolher o melhor método de navegação? Aqui estão alguns fatores a serem considerados:
· Os hiperlinks são melhores se você quiser que os usuários decidam quando mudar de página e para qual página ir.
·Se você deseja usar um programa para controlar o alvo de conversão, mas o tempo de conversão é determinado pelo usuário, use o controle HyperLink do servidor Web para definir dinamicamente sua propriedade NavigateUrl.
·Se desejar conectar o usuário a um recurso em outro servidor, utilize Response.Redirect.
· Use Response.Redirect para conectar usuários a recursos não ASPX, como páginas HTML.
· Se você quiser manter a string de consulta como parte da URL, use Response.Redirect.
·Se você deseja transferir o processo de execução para outra página ASPX no mesmo servidor Web, deve usar Server.Transfer em vez de Response.Redirect, pois Server.Transfer pode evitar comunicação de rede desnecessária, obtendo assim melhor desempenho e efeitos de navegação.
· Se desejar capturar os resultados de saída de uma página ASPX e depois inserir os resultados em outra página ASPX em um local específico, use Server.Execute.
·Se você deseja garantir que a saída HTML seja legal, use Response.Redirect, não use o método Server.Transfer ou Server.Execute.
Este artigo foi traduzido de: http://www.ondotnet.com/pub/a/dotnet/2003/04/07/aspnetnav.html