1 ASP.NET Conteúdo 1 Introdução 2 Criando e Executando um Exemplo de Formulário Web Simples 3 Controles Web (Web Controls) 3.1 Trabalhando com Controles do Servidor 3.2 Persistindo Valores entre Web Forms ASP.NET - Karina Oliveira 2 ASP.NET Conteúdo 4 Atividades Extras 4.1 Listando Arquivos de um Diretório 4.2 Controle AdRotator 4.3 Acompanhamento de Sessão 4.3.1 Cookies 4.3.2 HttpSessionState ASP.NET - Karina Oliveira 3 Persistindo Valores entre WebForms • Existem várias formas de passar valores de uma página para outra em ASP.NET: – – – – – Variáveis de sessão (Session) Método Server.Transfer Classe HttpContext QueryString (este já foi explicado!) ViewState (este também já foi explicado!) ASP.NET - Karina Oliveira 4 Usando Variáveis de Sessão • A idéia aqui é armazenar valores para um web form (form1.aspx) em variáveis de sessão e acessá-las no outro web form (form2.aspx) • Você só deve ter o cuidado de não sobrecarregar a sessão com muitas variáveis. • Vejamos como se faz: – Você cria um web form com controles – Fornece algum botão ou link para submeter o seu formulário – No evento Click do botão inclua uma variável de sessão e defina cada uma com os valores dos controles que deseja passar – Usando o método Response.Redirect envie os valores do formulário form1.aspx para o outro formulário form2.aspx ASP.NET - Karina Oliveira 5 Usando Variáveis de Sessão • Usando o exemplo da Página de Login anterior, tem-se: ASP.NET - Karina Oliveira 6 Usando Variáveis de Sessão No arquivo Login.aspx.cs: private void sendButton_Click(object sender, System.EventArgs e) { this.Session["user"] = userTextBox.Text; this.Session["password"] = passwordTextBox.Text; this.Response.Redirect("Resposta.aspx"); } ____________________________________________________________________ No arquivo Resposta.aspx.cs: private void Page_Load(object sender, System.EventArgs e) { respostaLabel.Text = "Usuário = " + Session["user"].ToString() + " e Senha = " + Session["password"].ToString(); Session.Remove("user"); Session.Remove("password"); } ASP.NET - Karina Oliveira 7 Usando Server.Transfer • O método Server.Transfer() transfere a execução de uma página ASPX para outra página ASPX. A página ASPX chamada deve ficar no mesmo servidor Web da página ASPX original e sua chamada não pode conter query string. • Quando a transferência ocorre, a URL mostrada no browser não muda porque o redirecionamento ocorre no servidor, ao contrário do que ocorre quando se utilizada o método Response.Redirect(), provocando melhor performance. • Por padrão, o método Server.Transfer() não repassa os dados do formulário e do query string do request da página original para a página que está sendo chamada. Entretanto, esses valores podem ser mantidos desde que seja informado o valor true como segundo argumento da chamada do método Server.Transfer(). • A utilização do método Server.Transfer é um pouco mais complexo. Nele você expõe os valores que deseja acessar em outra página como propriedade de uma classe. Por isto você terá que definir via código as propriedades na classe. É uma maneira mais elegante de passar valores. – Deve-se definir duas propriedades: Nome e Email. em form1.aspx ASP.NET - Karina Oliveira 8 Usando Server.Transfer() No arquivo Login.aspx.cs: Definindo duas propriedades como públicas! public String Username { get { return userTextBox.Text; } } public String Password { get { return passwordTextBox.Text; } } ASP.NET - Karina Oliveira 9 Usando Server.Transfer() No arquivo Login.aspx.cs: private void sendButton_Click(object sender,System.EventArgs e) { /* Método Server Transfer */ Server.Transfer("Resposta.aspx"); } No arquivo Resposta.aspx.cs: private void Page_Load(object sender, System.EventArgs e) { /* Usando Server.Transfer */ //cria uma instãncia de formulário WebForm1 login = (WebForm1)Context.Handler; respostaLabel.Text = "Usando Server.Tranfer: Usuário = " + login.Username + " e Senha = " + login.Password; } ASP.NET - Karina Oliveira 10 Usando a Classe HttpContext • A classe encapsula todas as informações específicas sobre uma requisição HTTP. O objeto HttpContext da requisição HTTP atual fornece acesso aos objetos intrínsecos Request, Response e Server para a requisição. • Os valores armazenados em HttpContext são validos somente durante a duração de uma requisição. ASP.NET - Karina Oliveira 11 Usando a Classe HttpContext No arquivo Login.aspx.cs: private void sendButton_Click(object sender,System.EventArgs e) { HttpContext context = HttpContext.Current; context.Items["user"] = userTextBox.Text; context.Items["password"] = passwordTextBox.Text; Server.Transfer("Resposta.aspx"); } No arquivo Resposta.aspx.cs: private void Page_Load(object sender, System.EventArgs e) { HttpContext context = HttpContext.Current; respostaLabel.Text = "Usando HTTPContext: Usuário = " + context.Items["user"].ToString() + " e Senha = " + context.Items["password"].ToString(); } ASP.NET - Karina Oliveira 12 Usando a Classe HttpContext ASP.NET - Karina Oliveira 13 Listando Arquivos de um Diretório ASP.NET - Karina Oliveira 14 Listando Arquivos de um Diretório • Preencher uma controle ListBox com os nomes dos arquivos de um diretório é uma tarefa relativamente simples de ser feita mesmo em páginas ASP.NET. ListBox ASP.NET - Karina Oliveira 15 Listando Arquivos de um Diretório No arquivo Arquivos.aspx.cs: private void Page_Load(object sender, System.EventArgs e) { if(!IsPostBack) { String nomeArquivo; ArrayList listaArquivos = new ArrayList(); String[] todosArquivos = Directory.GetFiles("C:\\temp\\images\\"); int i = 0; while (i < todosArquivos.Length) { nomeArquivo = todosArquivos[i]; nomeArquivo = nomeArquivo.Replace("C:\\temp\\images\\", ""); listaArquivos.Add(nomeArquivo); i++; } ListBox.DataSource = listaArquivos; ListBox.DataBind(); } ASP.NET - Karina Oliveira 16 Listando Arquivos de um Diretório Ainda ... No arquivo Arquivos.aspx.cs: private void sendButton_Click(object sender,System.EventArgs e) { if(ListBox.SelectedIndex > -1) { fileLabel.Text = "Opção selecionada ->" + ListBox.SelectedItem.Text; } } ASP.NET - Karina Oliveira 17 Controle AdRotator • O controle AdRotator é usado para exibir anúncios em sites Web. • Usa dados de anúncios armazenados em arquivos XML e seleciona aleatoriamente uma imagem para exibir e gera um link para a página Web associada a imagem gerada. ASP.NET - Karina Oliveira 18 Um pouco sobre XML ASP.NET - Karina Oliveira 19 Um pouco sobre XML ASP.NET - Karina Oliveira 20 Controle AdRotator ASP.NET - Karina Oliveira 21 Cookies ASP.NET - Karina Oliveira 22 Cookies ASP.NET - Karina Oliveira 23 Cookies ASP.NET - Karina Oliveira 24 Cookies ASP.NET - Karina Oliveira 25 Cookies No arquivo OptionsPage.aspx.cs: protected Hashtable books = new Hashtable(); private void Page_Load(object sender, System.EventArgs e) { if ( IsPostBack ){ respostaLabel.Visible = true; escolhaHyperLink.Visible = true; enviarButton.Visible = false; selectLabel.Visible = false; selectRadioButtonList.Visible = false; // notify user of what they have chosen if ( selectRadioButtonList.SelectedItem != null ) { respostaLabel.Text += selectRadioButtonList.SelectedItem.ToString() + "."; bibliografiaHyperLink.Visible = true; }else{ respostaLabel.Text = "Você não selecionou nenhuma opção!"; } } } ASP.NET - Karina Oliveira 26 Cookies Ainda ... No arquivo OptionsPage.aspx.cs: private void enviarButton_Click(object sender,System.EventArgs e) { // if choice was made by user if ( selectRadioButtonList.SelectedItem != null ) { string language = selectRadioButtonList.SelectedItem.ToString(); string ISBN = books[ language ].ToString(); //Cria cookie HttpCookie cookie = new HttpCookie( language, ISBN ); // adiciona o cookie a resposta response.Cookies.Add( cookie ); } } ASP.NET - Karina Oliveira 27 Cookies Ainda ... No arquivo OptionsPage.aspx.cs: override protected void OnInit( EventArgs e ) { // Adiciona valores para o Hashtable books.Add( "C#", "0-13-062221-4" ); books.Add( "C++", "0-13-089571-7" ); books.Add( "C", "0-13-089572-5" ); books.Add( "Python", "0-13-092361-3" ); books.Add( "Visual Basic .NET", "0-13-456955-5" ); // // CODEGEN: This call is required by // the ASP.NET Web Form Designer. // InitializeComponent(); base.OnInit( e ); } ASP.NET - Karina Oliveira 28 Cookies Ainda ... No arquivo Bibliografia.aspx.cs: override protected void OnInit(EventArgs e) { InitializeComponent(); base.OnInit(e); // recupera cookies do cliente HttpCookieCollection cookies = Request.Cookies; // se houver cookies além do ID Cookie, lista livros if ( cookies != null && cookies.Count != 1 ){ for ( int i = 1; i < cookies.Count; i++ ){ bibliografiaListBox.Items.Add( cookies[ i ].Name + " How to Program. ISBN#: " + cookies[ i ].Value ); } }else{ bibliografiaLabel.Text = "Nenhuma Bibliografia!"; bibliografiaListBox.Items.Clear(); bibliografiaListBox.Visible = false; } } ASP.NET - Karina Oliveira 29 Referências • DEITEL, Harvey M., DEITEL, Paul J. , Et Al. C# Como Programar. São Paulo: Pearson Education, 2003. • Dotnetjunkies http://www.asp.net/Tutorials/quickstart.aspx • José Carlos Macoratti http://www.macoratti.net/ ASP.NET - Karina Oliveira