Frequentemente você vai precisar manipular dados entre paginas ASP.NET, por exemplo, passar a informação da página de origem para uma página de destino. Geralmente, você pode ter uma página onde os usuários podem selecionam itens para comprar ou qualquer outra operação e quando os usuários enviam a página e você quer chamar outra página que pode processar ou exibir as informações que o usuário inseriu. Existem alguns modos de criar este efeito, nós vamos misturar as técnicas de codificação ASP.NET chamadas CodeBehind e In-line e utilizar propriedades publicas passadas através do Server.Transfer e da diretiva PreviousPageType.
Passando Parâmetros Entre Duas Paginas ASPX
Crie uma solução Web dinâmica chamada DaWeb003 em um projeto do tipo C# Empty e adicione uma pagina WebForms chamada default.aspx e outra chamada resultado.aspx. Defina a pagina default como pagina inicial da sua aplicação utilizando o botão direito na janela Solution Explorer e escolhendo a opção Set As Start Page.
1 – Para criar os objetos, na pagina inicial você pode primeiro criar uma tag <h2> e um objeto HTML chamado FieldSet, e então adicionar os componentes ASP.NET dentro dele, utilize dois Labels, dois DropDownList e um Button, você pode utilizar o Design para preencher as propriedades de seu DropDown ou pode apenas utilizar o código correspondente encontrado logo abaixo:
2 – A pagina inicial da aplicação oferece duas combinações na qual você pode selecionar, as opções pertencem umas as outras e o código na pagina C# CodeBehind processa a camada de negocio, avalia os resultados e os envia para a pagina de resultado:
2 – O Processo envia três parâmetros para a pagina ASPX, dois são os parâmetros que você escolheu, somente a nível de descrição, pois o processamento já foi efetuado na pagina anterior, o terceiro parâmetro é o resultado da combinação escolhida, que é nada mais que uma propriedade publica criada na própria classe da pagina principal e enviada para a pagina de resultado através de uma declaração Server.Transfer e recebida através de uma diretiva PreviousPageType referenciando a pagina origem para que a mensagem possa ser corretamente exibida para o usuário utilizando ainda a técnica de código C# na pagina ASPX chamada de In-line:
Exemplo:
Neste exemplo criamos duas paginas ASPX e utilizamos o CodeBehind no qual processa um resultado para uma seleção do usuário e o exibe através de parâmetros e uma propriedade publica. Os dados são processados na pagina de resultado por meio de código In-line.
ASPX- default.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="default.aspx.cs" Inherits="DaWeb003._default" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>Desenvolvimento Aberto - Passando Parâmetros Entre Paginas</title> </head> <body> <form id="form1" runat="server"> <div> <h2>Desenvolvimento Aberto - Passando Parâmetros</h2> <br /> <fieldset> <legend>Escolha o vocalista da banda correspondente:</legend> <br /> <br /> Escolha um vocalista:<br /> <asp:DropDownList ID="DropDownList1" runat="server" Width="200px"> <asp:ListItem>Eddie Vedder</asp:ListItem> <asp:ListItem>Kurt Cobain</asp:ListItem> <asp:ListItem>Scott Weiland</asp:ListItem> <asp:ListItem>Layne Staley</asp:ListItem> </asp:DropDownList> <br /> <br /> Escolha a banda:<br /> <asp:DropDownList ID="DropDownList2" runat="server" Width="200px"> <asp:ListItem>Stone Temple Pilots</asp:ListItem> <asp:ListItem>Alice in Chains</asp:ListItem> <asp:ListItem>Nirvana</asp:ListItem> <asp:ListItem>Pearl Jam</asp:ListItem> </asp:DropDownList> <br /> <br /> <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Enviar" /> <br /> <br /> </fieldset> </div> </form> </body> </html>
C#- default.aspx.cs
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace DaWeb003 { public partial class _default : System.Web.UI.Page { // Declara variáveis para os parâmetros private string nome; private String banda; private Boolean valida = false; protected void Page_Load(object sender, EventArgs e) { } // Define uma propriedade para transferencia public Boolean Resultado { get { return valida; } } protected void Button1_Click(object sender, EventArgs e) { // Recupera parametros nome = Request.Form["DropDownList1"]; banda = Request.Form["DropDownList2"]; // Se nome e banda são iguais OK ou proxima tentativa senão falso if ((nome.Equals("Eddie Vedder") && banda.Equals("Pearl Jam")) || (nome.Equals("Kurt Cobain") && banda.Equals("Nirvana")) || (nome.Equals("Scott Weiland") && banda.Equals("Stone Temple Pilots")) || (nome.Equals("Layne Staley") && banda.Equals("Alice in Chains"))) { valida = true; } // Transfere dados para a pagina de resultado Server.Transfer("resultado.aspx"); } } }
ASPX- resultado.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="resultado.aspx.cs" Inherits="DaWeb003.resultado" %> <!-- Diretiva que aponta para a pagina origen --> <%@ PreviousPageType VirtualPath="~/default.aspx" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>Desenvolvimento Aberto - Resultado</title> </head> <body> <form id="form1" runat="server"> <div> <h2>Desenvolvimento Aberto - Resultado</h2> <% Boolean resultado = PreviousPage.Resultado; String nome = PreviousPage.Request.Form["DropDownList1"]; String banda = PreviousPage.Request.Form["DropDownList2"]; if (resultado) { Response.Write("Você acertou!!! O vocalista: " + nome + " pertence a banda: " + banda); } else { Response.Write("Você errou!!! O vocalista: " + nome + " não pertence a banda: " + banda); } %> </div> </form> </body> </html>