Programação em ASP.net
Programação em ASP.net PostBacks, Round Trips Quando se faz um pedido de uma página.aspx o código da página é executado no servidor A cada pedido a página chama-se a si mesma de modo a executar o código outra vez. Como a página executa no servidor cada acção implica uma ida ao servidor. A web é inerentemente desconectada O browser e o servidor estão conectados apenas durante o tempo necessário para processar o pedido O pedido de uma página implica no servidor uma nova instância da página 1
Programação em ASP.net Ciclo de processamento da página Round Trip O utilizador solicita a página. (A página é solicitada usando um método HTTP GET). A página é executada pela primeira vez, executando processamentos preliminares se tiverem sido programados A página dinamicamente produz HTML para o navegador, semelhante a qualquer outra página HTML O utilizador interage com a página e submete a informação clicando num botão. A página é enviada para o servidor Web. ( O navegador executa um método HTTP POST, que no ASP.NET é conhecido como um postback). Especificamente, a página é remetida de volta a si mesma. No servidor Web, a página executa novamente. As informações que o utilizador introduziu estão disponíveis para o código da página. A página executa o processamento que estiver programado. A página dinamicamente produz HTML para o navegador, semelhante a qualquer outra página HTML 2
Programação em ASP.net Transferir informação (post) para outra página Usando hyperlinks na página Redireccionar programaticamente forçando o browser a pedir outra página Método Redirect Equivalente a um link Comando HTTP GET Informação transferida pela QueryString Redireccionar programáticamente transferindo o control para outra página na mesma aplicação Web Método Server.Transfer Comando HTTP POST Permite à página destino ler valores dos controlos e propriedades públicas da página inicial 3
Programação em ASP.net Cross-Page Configurar Cross-Page o que permite especificar outra página quando se faz post da corrente Cross-Page é a possibilidade de enviar informação para outras páginas Na página destino pode-se aceder às propriedades publicas da inicial e aos valores dos controlos. Definir no botão de submit a página destino PostBackUrl -> TargetPage.aspx 4
Programação em ASP.net Cross-Page (cont.) 1- Aceder à informação - Controlos Propriedade Page.PreviousPage Método FindControl if (Page.PreviousPage!= null) { TextBox SourceTextBox = (TextBox)Page.PreviousPage.FindControl( tbox1"); if (SourceTextBox!= null) { Label1.Text = SourceTextBox.Text; } } 5
Programação em ASP.net 2 - Aceder à informação - Propriedades Definir propriedade publica na página inicial public string Cidade{ get { return ddlcidade.selecteditem.text; }} Definir uma referência na página destino para a página inicial <%@ PreviousPageType VirtualPath="~/SourcePage.aspx" %> Na página destino aceder à propriedade Label1.Text = PreviousPage.Cidade; 6
Programação em ASP.net Links no MSDN: Cross-Page Posting in ASP.NET Web Pages http://msdn2.microsoft.com/en-us/library/ms178139(vs.80).aspx Redirecting Users to Another Page http://msdn2.microsoft.com/en-us/library/x3x8t37x.aspx How to: Pass Values Between ASP.NET Web Pages http://msdn2.microsoft.com/en-us/library/6c3yckfw.aspx 7
Ciclo de vida da página
Ciclo de vida da página Modelo de compilação e classes parciais Uma Web Form deriva da classe System.Web.UI.Page Dois componentes: Code behind file- xxx.aspx.cs - contém o código para os eventos e outros métodos relacionados com a página Public parcial class _Default protected void Page_Load(object sender, EventArgs e) {if (!Page.IsPostBack) Designer file xxx.aspx que contém declarações de controlos HTML e eventos. <asp:radiobuttonlist ID="rbl" runat="server" AutoPostBack="True" OnSelectedIndexChanged="rbl_SelectedIndexChanged"> 9
Ciclo de vida da página Ciclo de vida da página Para cada pedido a página é instanciada de novo, perdendo todos os valores e estado anterior Para manter a informação tem de se usar um mecanismo de gestão de estado: Application, Session, Variáveis de Cache ou Cookies. A classe Page implementa o método ProcessRequest da interface IHttpHandler, responsável por todas as fases do ciclo de vida da página Durante a execução da página são lançados vários eventos. 10
Sequência de Eventos Sequência de Eventos 1 PreInit Todos os controlos criados no design são inicializados com os seus valores por omissão. Neste evento podem ser criados controlos dinâmicos. Pode-se fazer override do método. protected override void OnPreInit(EventArgs e) { //custom code base.onpreinit(e); } Permite a definição dinâmica da Master Page e do theme aplicado à página. 11
Sequência de Eventos 2 Init Os controlos da página são inicializados e a propriedade UniqueID de cada controlo é definida. Os skin são aplicados aos controlos. O ViewState dos controlos ainda não está disponível. 3 InitComplete Apenas ocorre quando é um postback e consiste na recuperação do estado interno da página através dos dados guardados no Viewstate e no ControlState. O estado interno dos controlos é actualizado com os dados provenientes do formulário enviado HTTP Post Data 4 Load Podem ser criados controlos dinâmicos e definidas propriedades dos controlos. O métod IsPostBack permite verificar se é um postback 12
Sequência de Eventos 4 Load (cont) São gerados os eventos servidores dos controlos. Por exemplo, o evento Click gerado pelo controlo Button. 5 PreRender Começa a fase de geração do HTML da página. É o ultimo evento onde se pode alterar o valor dos controlos. 6 SaveViewState, SaveControlState A página inicia o armazenamento dos dados internos mantidos por todos os controlos. Os dados são guardados num HTML input escondido <input type="hidden" name=" VIEWSTATE" id=" VIEWSTATE" value="/wepdwukmtk3mdmwmzewna. 13
Sequência de Eventos 6 - Render É gerado o HTML para todos os controlos existentes na árvore de controlos da página. O evento RenderControl é chamado recursivamente para todos os controlos. 7 UnLoad Permite efectuar a limpeza de eventuais recursos usados durante o processamento Links [ASP.NET Page Life Cycle] http://msdn2.microsoft.com/en-us/library/ms178472.aspx [ASP.NET Page Lifecycle] http://www.codeproject.com/useritems/lifecycle.asp http://codebetter.com/blogs/raymond.lewallen/archive/2005/03/10/59583.aspx 14
Eventos Exemplo de override de um evento A master page é acrescentada à página no evento PreInit. A alteração ou substituição da master page deve ser realizada nesse evento protected override void OnPreInit(EventArgs e) { base.onpreinit(e); //criar variáveis com o controlo da master Label lb = (Label)Page.Master.FindControl("LabelMaster"); lb.text = Texto alterado"; // pode tambem alterar a master page //Page.MasterPageFile = "~/MasterPage2.master"; } 15
Trace Trace Permite detectar erros na página e ver os vários eventos que ocorrem na página Document -> Properties - > Trace = true Informação gerada: Trace Information Control Tree Session state Aplication state Request Cookie Collection Response cookie Collection Headers Collection Response headers collection Form Collection QueryString Collection Server variables 16
Trace Inserir Informação no Trace Trace.Warn("debugging", "Radio Button SelectedIndexChanged "); Excerto da Informação de trace aspx.page aspx.page aspx.page aspx.page aspx.page aspx.page aspx.page aspx.page debugging aspx.page End ProcessPostData Begin PreLoad End PreLoad Begin Load End Load Begin ProcessPostData Second Try End ProcessPostData Second Try Begin Raise ChangedEvents Radio Button SelectedIndexChanged End Raise ChangedEvents 17
Trace O trace pode ser ligado para toda a aplicação sendo mostrada a informação noutra página Link MSDN [Walkthrough: Using Tracing in Visual Web Developer to Help Find Web Page Errors] http://msdn2.microsoft.com/en-us/library/yc8h9b0b(vs.80).aspx 18
Eventos Server Control Event Model Os eventos associados aos server control são originados nos clientes mas processados no servidor protected void Bt_Click(object sender, EventArgs e) { // código de processamento do evento } Asp.net captura o evento, transmite e interpreta o evento Apenas alguns eventos geram chamada ao servidor Button -> Click, Calendar -> SelectionChanged Para outros eventos é necessário AutoPostBack=true; CheckBox -> CheckedChange Server control não suportam eventos com grande ocorrência OnMouseOver, OnMouseOut 19
Eventos Argumentos dos eventos protected void Bt_Click(object sender, EventArgs e) Objecto que provocou o evento object sender Um objecto evento que contém informação específica sobre o evento EventArgs e CommandEventArgs e Propriedades: CommandName, CommandArgument protected void btsubmit_command(object sender, CommandEventArgs e) 20
Eventos Propriedades CommandName e CommandArgument <h3>button CommandName Example</h3> Click on one of the command buttons. <asp:button id="button1" Text="Sort Ascending" CommandName="Sort" CommandArgument="Ascending" OnCommand="CommandBtn_Click" runat="server"/> <asp:button id="button2" Text="Sort Descending" CommandName="Sort" CommandArgument="Descending" OnCommand="CommandBtn_Click" runat="server"/> <br><br> 21
Eventos void CommandBtn_Click(Object sender, CommandEventArgs e) { switch(e.commandname) { case "Sort": // Call the method to sort the list. Sort_List((String)e.CommandArgument); break; case "Submit": // Display a message for the Submit button being clicked. Message.Text = "You clicked the Submit button"; // Test whether the command argument is an empty string (""). if((string)e.commandargument == "") 22
Criação dinâmica de controlos protected String[] links= {"http://www.sapo.pt","http://www.tsf.pt"}; foreach (String str in links) { HyperLink hl = new HyperLink(); hl.text = str; hl.navigateurl = str; PanelLinks.Controls.Add(hl); LiteralControl lc = newliteralcontrol("<br>"); PanelLinks.Controls.Add(lc); } 23
Criação dinâmica de uma tabela int n = 5; int k = 0; Table ta = new Table(); for (int i = 0; i < n; i++) { TableRow tr = new TableRow(); for (int j = 0; j < n; j++) { TableCell tc = new TableCell(); tc.text = k.tostring(); tr.cells.add(tc); k++; } ta.rows.add(tr); } Panel1.Controls.Add(ta); } 24