Programação em
ASP.net
PostBacks , Round Trips
A web é inerentemente desconectada
O browser e o servidor estão conectados apenas
durante o tempo necessário para processar o pedido
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
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.
O pedido de uma página implica no servidor uma nova
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
2
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
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 -
Response.Redirect(string url,…)
Equivalente a um
hyperlinks
Comando HTTP – GET
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
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
4
Na página destino pode-se aceder às propriedades
publicas da inicial e aos valores dos controlos.
Definir nas propriedades do botão de submit a
página destino
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; } }2 - Aceder à informação - Propriedades
Definir propriedade publica na página inicial
public string Cidade{ get
{
return ddlCidade.SelectedItem.Text; }}
6
Definir uma referência na página destino para a página
inicial
Na página destino aceder à propriedade
<%@ PreviousPageTypeVirtualPath="~/SourcePage.aspx" %>
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
Redirecting Users to Another Page
http://msdn2.microsoft.com/en-us/library/x3x8t37x.aspx
How to: Pass Values Between ASP.NET Web Pages
Ciclo de vida da página
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
Designer file – xxx.aspx – que contém declarações de
controlos HTML e eventos.
Public parcial class _Default
protected void Page_Load(object sender, EventArgs e)
{if (!Page.IsPostBack) …
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 no servidor tem de se
usar um mecanismo de gestão de estado:
Application, Session, Variáveis de Cache ou Cookies.
10
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
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.
Permite a definição dinâmica da Master Page e do
theme aplicado à página.
protected override void OnPreInit(EventArgs e) { //custom code
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
12
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
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
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"
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
14
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
Eventos
Exemplo de override de um evento
A master page é embebida com a página no evento
PreInit.
A alteração do conteúdo 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"; }
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
16
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
Argumentos dos eventos
protected void Bt_Click(
object sender, EventArgs e
)Object sender
Objecto que provocou o evento
EventArgs e
Objecto evento que contém informação específica
sobre o evento
Exemplo para um button
CommandEventArgs e
Propriedades: CommandName, CommandArgument protected void btsubmit_Command (object sender,
<h3>Button CommandName Example</h3> Click on one of the command buttons. <br><br> <asp:Button id="Button1" Text="Sort Ascending" CommandName="Sort" CommandArgument="Ascending" OnCommand="CommandBtn_Click" runat="server"/> 18 runat="server"/> <asp:Button id="Button2" Text="Sort Descending" CommandName="Sort" CommandArgument="Descending" OnCommand="CommandBtn_Click" runat="server"/> <br><br>
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. // 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 == "") …
GridViewRowEventArgs
RowCreated - método ocorre quando é criada uma
row na gridview
protected void GridDatalhesFactura_RowCreated(object sender,
GridViewRowEventArgs e)
{
// torna invisiveis colunas da grelha e.Row.Cells[0].Visible = false;
e.Row.Cells[2].Visible = false; e.Row.Cells[3].Visible = false; }
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();
HyperLink hl = new HyperLink();
hl.Text = str;
hl.NavigateUrl = str;
PanelLinks.Controls.Add(hl);
LiteralControl lc = newLiteralControl("<br>");
PanelLinks.Controls.Add(lc);
}
Criação dinamica 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++)
22
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); }
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 Aplication stateRequest Cookie Collection Response cookie Collection Headers Collection
Response headers collection Form Collection
QueryString Collection Server variables
Trace
Inserir Informação no Trace
Trace.Warn("debugging", "Radio Button
SelectedIndexChanged ");
Excerto da Informação de trace
aspx.page
End ProcessPostData
aspx.page
Begin PreLoad
aspx.page
End PreLoad
24
aspx.page
End PreLoad
aspx.page
Begin Load
aspx.page
End Load
aspx.page
Begin ProcessPostData Second Try
aspx.page
End ProcessPostData Second Try
aspx.page
Begin Raise ChangedEvents
debugging
Radio Button SelectedIndexChanged
Trace
O trace pode ser ligado para toda a aplicação sendo
mostrada a informação noutra página