Escolar Documentos
Profissional Documentos
Cultura Documentos
Universidade AJAX PDF
Universidade AJAX PDF
ai 7/8/2007 15:48:43
Herbert Moroni
UNIVERSIDADE
CM
MY
CY
CMY
K
Universo dos Livros Editora Ltda.
Rua Tito, 1.609
CEP 05051-001 • São Paulo/SP
Telefone: (11) 3648-9090 • Fax: (11) 3648-9083
www.universodoslivros.com.br
e-mail: editor@universodoslivros.com.br
ISBN 978-85-60480-53-1
CDD 006.786
Sumário
Capítulo 1
Entendendo o AJAX ...................................................... 9
O que é o AJAX?..........................................................................................................10
A primeira função .....................................................................................................19
A segunda função ......................................................................................................20
A terceira função .......................................................................................................21
Considerações sobre o uso do AJAX .........................................................................22
Capítulo 2
AJAX ASP.NET ........................................................... 25
Instalando o AJAX ASP.NET.....................................................................................26
Conhecendo o AJAX ASP.NET ................................................................................30
Capítulo 3
O controle UpdatePanel .............................................. 59
Capítulo 4
O controle UpdateProgress ......................................... 77
Capítulo 5
O controle Timer ......................................................... 87
Capítulo 6
A classe PageRequestManager ................................... 99
Capítulo 7
Usando o AJAX ASP.NET em
aplicações já existentes ............................................. 113
Capítulo 8
Usando Web Services em suas
aplicações AJAX ASP.NET ....................................... 119
Capítulo 9
Aprofundando no uso do controle UpdatePanel ....... 133
Capítulo 10
Aprofundando no uso de Web Services
e no desenvolvimento voltado para o
navegador (Cliente-Centric) ...................................... 157
Capítulo 11
AJAX Control Toolkit ................................................ 183
Instalando o AJAX Control Toolkit ........................................................................184
Conhecendo o AJAX Control Toolkit ....................................................................193
O que é o AJAX?
AJAX é a abreviação de Asynchronous JavaScript and XML. Não é uma tecnologia,
e sim, uma metodologia, que utiliza vários recursos e tecnologias, como Javascript,
DOM e XML. O objetivo do AJAX é evitar que a cada solicitação do servidor a página
precise ser completamente recarregada. Para isto, usamos o objeto XMLHttpRequest,
por meio do Javascript, para intermediar todas as solicitações ao servidor.
Vamos ver como isso funciona.
10 Universidade AJAX
capítulo
1
Figura 1.1.
Nesse nosso primeiro exemplo, vamos criar uma aplicação cliente com Javascript
e o objeto XMLHttpRequest, que solicita ao servidor uma simples adição de dois
valores inteiros. Para isto, teremos duas páginas na nossa aplicação: uma que atuará
como o cliente e outra como servidor, que retornará o valor calculado.
2. Crie um novo formulário para sua aplicação com o nome Default2.aspx. Para
isto, clique com o botão direito sobre o nome do projeto na janela Solution Explorer,
depois clique em Add New Item (Figura 1.2).
Figura 1.2.
Entendendo o AJAX 11
3. Na janela aberta, selecione Web Form, marque a opção Place code in separate
file (isso faz com que seja criado um arquivo separado para o código da página) e
clique em Add.
Figura 1.3.
Figura 1.4.
12 Universidade AJAX
capítulo
1
Figura 1.5.
6. Mude a propriedade Value dos dois primeiros controles (Text1 e Text2) para
0, como mostra a Figura 1.6:
Figura 1.6.
Entendendo o AJAX 13
Figura 1.7.
<script language=”javascript”>
var ajax;
function openAjax() {
if (window.ActiveXObject) {
ajax = new ActiveXObject(“Microsoft.XMLHTTP”);
}
else if (window.XMLHttpRequest)
{
ajax = new XMLHttpRequest();
}
}
function atualizar() {
if (ajax.readyState==4) {
docu ment.getElementById(‘Text3’).value = ajax.
responseText;
}
14 Universidade AJAX
capítulo
1
function total() {
url=”Default2.aspx?A=” + document.getElementById(‘Text1’).value
+
“&B=” + document.getElementById(‘Text2’).value;
ajax.open(“GET”,url,true);
ajax.onreadystatechange = atualizar;
ajax.send();
}
</script>
Não se preocupe se não compreender o código Javascript agora, logo adiante ex-
plicar e, em detalhes cada uma das funções do código anterior. Para maiores detalhes
sobre Javascript e DOM, você pode consultar os Apêndices A e B também.
<body onload=”openAjax();”>
Isso faz com que a função Javascript openAjax() seja executada assim que a
página for carregada.
Isso permite que a função Javascript total() seja executada sempre que o evento
onkeyup ocorra em qualquer uma das caixas de texto.
Entendendo o AJAX 15
<title>Untitled Page</title>
<script language=”javascript”>
var ajax;
function openAjax() {
if (window.ActiveXObject) {
ajax = new ActiveXObject(“Microsoft.XMLHTTP”);
}
else if (window.XMLHttpRequest) {
ajax = new XMLHttpRequest();
}
}
function atualizar() {
if (ajax.readyState==4) {
document.getElementById(‘Text3’).value = ajax.
responseText;
}
}
function total() {
url=”Default2.aspx?A=” + document.getElementById(‘Text1’).
value +
“&B=” + document.getElementById(‘Text2’).value;
ajax.open(“GET”,url,true);
ajax.onreadystatechange = atualizar;
ajax.send();
}
</script>
</head>
<body onload=”openAjax();”>
<form id=”form1”>
<div>
<input id=”Text1” type=”text” onkeyup=”total();” value=”0” />
<br />
<br />
<input id=”Text2” type=”text” onkeyup=”total();” value=”0” />
<br />
<br />
<input id=”Text3” type=”text” />
</div>
</form>
</body>
</html>
12. Dê um clique duplo sobre a página em branco para que o evento Page_Load
seja criado e digite o seguinte código:
16 Universidade AJAX
capítulo
1
Dim a As Integer = 0
Dim b As Integer = 0
If Request.QueryString(“A”) <> Nothing Then
a = Convert.ToInt16(Request.QueryString(“A”).
ToString())
End If
Figura 1.8.
Esse código é bem simples. Primeiro declaramos duas variáveis do tipo Integer
e atribuímos o valor 0 a elas.
Então, verificamos se existe um parâmetro A com valor. Se sim, atribuímos esse
valor à variável. Fazemos o mesmo com o parâmetro B. A última linha escreve a
soma dos valores das duas variáveis. Esse texto será recuperado pelo nosso programa
AJAX e atribuído à caixa de texto necessária.
int a = 0;
int b = 0;
if (Request.QueryString[“A”] != null){
a = Convert.ToInt16(Request.QueryString[“A”].
ToString());
}
if (Request.QueryString[“B”] != null){
Entendendo o AJAX 17
b = Convert.ToInt16(Request.QueryString[“B”].
ToString());
}
Response.Write(a + b);
Figura 1.9.
14. Volte para a página Default.aspx e execute sua aplicação (para isto, você pode
clicar em F5). A seguinte tela poderá aparecer:
Figura 1.10.
18 Universidade AJAX
capítulo
1
Figura 1.11.
Digite alguns números nas duas primeiras caixas de texto. Observe que, con-
forme você digita, o resultado já vai sendo calculado e exibido na terceira caixa
de texto sem recarregar nenhuma vez a página. Isto é AJAX. Usamos Javascript,
o objeto XMLHttpRequest e o DOM para fazer solicitações ao servidor rodando
ASP.NET.
A primeira função
function openAjax() {
if (window.ActiveXObject) {
ajax = new ActiveXObject(“Microsoft.XMLHTTP”);
}
else if (window.XMLHttpRequest) {
ajax = new XMLHttpRequest();
}
}
Entendendo o AJAX 19
Isso significa que precisaremos verificar qual o objeto que o navegador trabalha,
se XMLHTTP ou XMLHttpRequest. É isso que fazemos nesta primeira função.
Se estivermos trabalhando com o Internet Explorer, vamos adicionar o ActiveX
XMLHTTP à variável ajax que declaramos antes desta função no Javascript. Se
for outro navegador, vamos atribuir o objeto XMLHttpRequest. Eles trabalham
de forma idêntica.
A segunda função
function atualizar() {
if (ajax.readyState==4) {
docu ment.getElementById(‘Text3’).value = ajax.
responseText;
}
}
Você pode utilizar o estágio 1 para exibir uma mensagem de carregando, por
exemplo, até que o estágio 4 esteja completo.
Uma outra propriedade que usamos nesta função é a responseText. Por meio
dela, atribuímos o valor que está sendo retornado à caixa de texto. Esta propriedade
sempre retorna uma string com os dados do servidor Web, mas, ao invés dela, você
pode usar a propriedade responseXML que retorna um documento XML. Este
documento pode ser manipulado por você utilizando DOM e Javascript. Para maiores
detalhes sobre DOM e Javascript, consulte os Apêndices A e B.
Temos também a propriedade onreadystatechange, que será comentada
quando estudarmos a próxima função.
O objeto XMLHttpRequest tem mais duas propriedades importantes que podem
ser bem úteis em suas páginas. São elas: status e statusText.
20 Universidade AJAX
capítulo
1
Não vou me aprofundar em exemplos sobre estas propriedades, mas você pode
utilizá-las como utilizamos a propriedade readState para enriquecer ainda mais
suas aplicações AJAX.
A terceira função
function total() {
url=”Default2.aspx?A=” + document.getElementById(‘Text1’).value
+
“&B=” + document.getElementById(‘Text2’).value;
ajax.open(“GET”,url,true);
ajax.onreadystatechange = atualizar;
ajax.send();
}
Esta função pega os valores das duas primeiras caixas de texto e envia para a
página Default2.aspx como parâmetro. A página Default2.aspx usará esses valores
para efetuar a soma e retornar o resultado.
url=”Default2.aspx?A=” + document.getElementById(‘Text1’).value
+
“&B=” + document.getElementById(‘Text2’).value;
“Default2.aspx?A=12&B=11”
Entendendo o AJAX 21
• usuário e senha – se o servidor Web necessitar de uma autenticação.
• send(dados): envia a requisição, enviando opcionalmente os dados;
• abort(): aborta uma requisição em atividade;
• setRequestHeader(nome, valor): informa um cabeçalho (header) para a
requisição;
• getResponseHeader(nome): retorna o valor do cabeçalho (header) informado;
• getAllResponseHeaders(): retorna uma string contendo todos os cabeçalhos
(header).
Considerações sobre
o uso do AJAX
Como você percebeu, embora possa criar aplicações com interfaces bem mais ricas
em AJAX, isto não é algo simples, principalmente pelo fato dele ser uma tecnologia
executada no cliente. E no cliente podemos ter diferentes tipos de navegadores, e cada
navegador pode ter, ainda, instalado ou não, certos tipos de extensões que podem
influenciar na execução do código. Podemos ter ainda a situação de o Javascript,
simplesmente não estar habilitado no navegador do cliente.
Então, você vai precisar escrever o código Javascript para cada uma das possi-
bilidades e testá-las. Ainda assim, para os navegadores sem suporte, ao Javascript
será necessário o que chamamos de Javascript não-obstrutivo, ou seja, sua página
deve rodar sem os recursos do AJAX. Isso porque na Internet cada visitante é um
potencial cliente e você não pode eliminar potenciais clientes porque eles não têm
os recursos que você precisa para que eles naveguem no seu site.
Para programar em Javascript também, não contamos com as ferramentas de
Debug (tratamento de erros) e o IntelliSense do Visual Studio, que melhoram muito
a produtividade de um sistema ou website para a Internet.
O que quero deixar bem claro aqui é que tudo tem seu preço. Com o ganho na
interface, temos uma perda de produtividade e isso não é bom. Principalmente para
os programadores ASP.NET, que têm à sua disposição todos os recursos do Visual
Studio.
E, como você sabe, perda de produtividade representa maior tempo de desen-
volvimento, assim, temos um aumento no custo do projeto. É exatamente isso que
22 Universidade AJAX
capítulo
1
ninguém quer, principalmente as empresas contratantes que cada vez mais pressionam
os projetos para que os custos e prazos sejam reduzidos.
Visando dar maior produtividade no desenvolvimento de aplicações ASP.NET,
foram criados vários frameworks, ou seja, bibliotecas de código Javascript que pode-
mos usar no desenvolvimento com AJAX. O Google tem um framework destes, mas
eles também não ajudam muito para quem desenvolve em ASP.NET usando o Visual
Studio.NET, pela difícil integração com o mesmo. Através deles, perdemos o poder
dos Web Server Controls, como você viu no exemplo que fizemos neste Capítulo.
Tentando ajudar na produtividade dos programadores .NET, a Microsoft lan-
çou seu próprio framework integrado ao Visual Studio. Primeiro conhecido como
ATLAS e agora chamado de AJAX ASP.NET, ele é o tema principal deste livro. Por
meio dele, usaremos os poderosos recursos do AJAX sem uma perda considerável
de produtividade.
A Microsoft também tem outras iniciativas para melhorar o desenvolvimento
com AJAX, principalmente com a versão futura do Visual Studio, que deve ajudar
na depuração de erros do Javascript.
Entendendo o AJAX 23
Capítulo 2
AJAX ASP.NET
O objetivo deste capítulo é mostrar a você o poder do framework AJAX ASP.
NET em suas aplicações Web: como ele pode melhorar a produtividade e deixar suas
aplicações mais interativas.
Figura 2.1.
26 Universidade AJAX
capítulo
2
Figura 2.2.
Figura 2.3.
AJAX ASP.NET 27
Você será direcionado a uma página de download da Microsoft, como mostra a
Figura 2.4 a seguir:
Figura 2.4.
5. Clique no botão Download. Você pode salvar este arquivo no seu disco rígido,
clicando em Salvar; ou executá-lo imediatamente, clicando em Executar.
Figura 2.5.
28 Universidade AJAX
6. Clique em Executar para iniciar o download e executá-lo imediatamente. Este
capítulo
será feito e a instalação será iniciada, como mostra a Figura 2.6: 2
Figura 2.6.
7. Clique em Next.
Figura 2.7.
AJAX ASP.NET 29
Figura 2.8.
Figura 2.9.
30 Universidade AJAX
capítulo
2
Figura 2.10.
Perceba que, ao criar o novo projeto, foi adicionado um novo Template chamado
ASP.NET AJAX - Enabled Web Site. Quando você seleciona este Template, o Visual
Studio adiciona automaticamente no arquivo Web.Config as instruções usadas pelos
componentes ASP.NET AJAX. Nos próximos tópicos, você vai conhecer estas alte-
rações e aprender a usar o AJAX ASP.NET em aplicações Web já existentes.
Figura 2.11.
AJAX ASP.NET 31
Durante a instalação, o Assembly AJAX - ExtensionToolbox.DLL foi referenciado
na ToolBox do Visual Studio; o resultado disso é a nova guia que você tem disponível
agora na sua Toolbox, como mostra a Figura 2.12:
Figura 2.12.
No modo Design, na página Default.aspx, você nota mais uma diferença: o con-
trole ScriptManager, como mostra a Figura 2.13:
Figura 2.13.
32 Universidade AJAX
utilizar o AJAX ASP.NET. Ele é a parte central do framework o AJAX ASP.NET
capítulo
e controla todos os recursos AJAX na página. 2
3. Vamos agora adicionar um banco de dados ao nosso projeto. Para isso, na janela
Solution Explorer, clique com o botão direito sobre o nome do projeto e selecione
Add New Item (Figura 2.14).
Figura 2.14.
Figura 2.15.
AJAX ASP.NET 33
5. Você é questionado se deseja adicionar o arquivo de banco de dados em uma
pasta especialmente reservada a ele chamada App_Data (Figura 2.16). Isto é uma boa
prática, clique em Sim.
Figura 2.16.
Figura 2.17.
6. Vamos adicionar uma tabela no nosso banco de dados, para isso, na janela Data-
base Explorer, clique com o botão direito sobre Tables e selecione Add New Table.
Figura 2.18.
34 Universidade AJAX
7. Preencha as colunas Column Name, Data Type e Allow Nulls, como mostra a
capítulo
figura a seguir: 2
Figura 2.19.
8. Clique com o botão direito sobre ProjetoId e selecione Set Primary Key, como
mostra a próxima figura. Isso torna o campo ProjetoId a chave primária da nossa
tabela.
Figura 2.20.
AJAX ASP.NET 35
9. Ainda em ProjetoId, na janela Column Properties, marque a opção Yes na
propriedade (Is Identity), como mostra a Figura 2.21:
Figura 2.21.
10. Clique em Salvar. Surgirá uma caixa de diálogo Choose Name, solicitando o
nome para a tabela. Digite Projetos e clique em OK, como mostra a Figura 2.22.
Figura 2.22.
11. Vamos adicionar alguns registros na nossa tabela. Para isto, na janela Data-
base Explorer, clique com o botão direito sobre a tabela Projetos e selecione Show
Table Data (Figura 2.23).
36 Universidade AJAX
capítulo
2
Figura 2.23.
Figura 2.24.
AJAX ASP.NET 37
13. Para realizar o acesso aos dados em nossas aplicações, vamos utilizar um
Dataset tipado. Há várias técnicas para criar uma camada de acesso a dados, mas o
Dataset tipado, juntamente com o TableAdapter, é uma das formas mais simples de
realizar esta tarefa. Para adicionar um Dataset tipado, proceda como fizemos para
adicionar um banco de dados, mas na janela Add New Item, ao invés de escolher a
opção SQL Database, selecione a opção Dataset. Vamos chamar o nosso Dataset de
ProjetosDataset.xsd, como mostra a Figura 2.25:
Figura 2.25.
14. O Dataset, assim como o banco de dados, pode ser adicionado em uma pasta
específica. No caso do Dataset, a pasta é App_Code. Clique em Sim na mensagem
ilustrada pela Figura 2.26 para que a pasta seja criada e o Dataset adicionado na
mesma.
Figura 2.26.
38 Universidade AJAX
capítulo
2
Figura 2.27.
16. O próximo passo é decidir se deseja que a string de conexão ao banco de dados
seja adicionada ao arquivo de configuração. Clique em Yes, Save the connection as:,
como mostra Figura 2.28 a seguir, e clique em Next >.
Figura 2.28.
17. Podemos fazer o acesso aos dados de duas formas: usando comandos SQL, e
por meio de Stored Procedures. Marque a opção Use SQL statements e clique em
Next > (Figura 2.29).
AJAX ASP.NET 39
Figura 2.29.
Figura 2.30.
19. Na janela Add Table, selecione a tabela Projetos, na guia Tables, e clique em
Add. Em seguida, clique em Close (Figura 2.31). A tabela Projetos vai ser adicionada
na janela Query Builder.
40 Universidade AJAX
capítulo
2
Figura 2.31.
20. A janela Query Builder nos ajuda na criação dos comandos SQL. Selecione
ProjetoID, Nome e Completa, na tabela Projetos, e digite a cláusula WHERE, como
mostra a Figura 2.32:
Figura 2.32.
22. A próxima janela exibe o comando SQL criado pelo Query Builder e permite
que você faça ajustes, se necessário. O comando deve ser igual ao mostrado na pró-
xima figura. Clique em Next > (Figura 2.33).
AJAX ASP.NET 41
Figura 2.33.
Na próxima tela (Figura 2.34) você pode escolher e nomear os métodos que deseja
que o assistente crie para manipulação e recuperação dos dados.
Figura 2.34.
23. Para nosso exemplo, não vamos utilizar o método Fill, então desmarque esta
opção.
42 Universidade AJAX
24. Mude o nome do método Return a DataTable para GetProjetosPorStatus,
capítulo
como mostra a Figura 2.35. 2
Figura 2.35.
A próxima tela (Figura 2.36) resume todas as tarefas que serão realizadas pelo
assistente.
Figura 2.36.
AJAX ASP.NET 43
26. Clique em Finish. A tabela é adicionada ao Dataset, como mostra a Figura
2.37.
Figura 2.37.
27. Vamos testar o método GetProjetosPorStatus. Para isto, clique com o botão
direito sobre o mesmo e selecione Preview Data (Figura 2.38):
Figura 2.38.
44 Universidade AJAX
Será exibida a janela Preview Data (Figura 2.39):
capítulo
2
Figura 2.39.
Figura 2.40.
AJAX ASP.NET 45
29. Volte ao arquivo Default.aspx e adicione os seguintes controles:
• 1 DropDownList;
• 1 GridView;
• 1 DetailsView.
Figura 2.41.
Figura 2.42.
46 Universidade AJAX
capítulo
2
Figura 2.43.
33. Selecione Object e, na opção Where will the application get data from?, clique
em OK, como mostra a Figura 2.44:
Figura 2.44.
Selecionamos Object na tela anterior porque vamos recuperar nossos dados uti-
lizando o objeto Dataset que criamos.
AJAX ASP.NET 47
O próximo passo do assistente permite que selecionemos o objeto TableAdapter.
O TableAdapter contém o método que criamos para recuperar os dados da nossa
tabela. Ele foi criado quando criamos o Dataset.
34. Na tela seguinte, selecione a opção como mostra, a Figura 2.45 e, em seguida,
clique em Next >.
Figura 2.45.
Você pode agora escolher o método do TableAdapter que deseja. Nós só temos
um método, o GetProjetosPorStatus (Figura 2.46).
Figura 2.46.
48 Universidade AJAX
capítulo
2
Figura 2.47.
Figura 2.48.
39. Usaremos o controle DetailsView1 para inserir novos projetos. Para isto, na
Smart Tag do DetailsView1, selecione Enable Inserting e também escolha Objec-
tDataSource1 em Choose Data Source, como mostra a Figura 2.49:
Figura 2.49.
AJAX ASP.NET 49
40. Antes de testar nossa aplicação, marque a propriedade AutoPostBack do
controle DropDownList1 como true. Senão ao selecionarmos uma opção não será
disparado o Post que atualiza o GridView.
Perceba que cada vez que você muda a opção do DropDownList1 a página é
totalmente recarregada (Figura 2.50). Acontece o mesmo se você inserir um novo
projeto.
Figura 2.50.
42. Adicione um controle UpdatePanel, como mostra a Figura 2.51. Ele está
localizado na guia AJAX Extensions na Toolbox.
50 Universidade AJAX
capítulo
2
Figura 2.51.
Figura 2.52.
AJAX ASP.NET 51
44. Na janela Properties, localize a propriedade Triggers do UpdatePanel1, e na ja-
nela UpdatePanelTrigger Collection Editor, clique em Add. Selecione DropDownList1,
na propriedade ControlID e SelectedIndexChanged para a propriedade EventName.
Clique em OK (Figura 2.53).
Figura 2.53.
Figura 2.54.
52 Universidade AJAX
Você vai aprender detalhes sobre o UpdatePanel e o uso da Trigger no próximo
capítulo
Capítulo. Por enquanto, apenas entenda o seguinte: já que o DropDownList1 está 2
fora do UpdatePanel1, precisamos indicar ao mesmo que o DropDownList1 será o
responsável por realizar a chamada da atualização do que está dentro do Update-
Panel1. Para isto, usamos a Trigger.
Figura 2.55.
AJAX ASP.NET 53
Figura 2.56.
Figura 2.57.
54 Universidade AJAX
capítulo
2
Figura 2.58.
52. Para finalizar, apenas quero apresentar para você o controle UpdateProgress.
Para isto, adicione o mesmo à sua página Default.aspx e digite dentro dele o texto
“Atualizando”, como mostra a Figura 2.59:
Figura 2.59.
AJAX ASP.NET 55
O conteúdo deste controle será exibido enquanto a página recarregar algum dos
UpdatePanels. Como nosso exemplo é bem simples e o recarregamento bem rápido,
se você executar a página agora não vai conseguir visualizar o texto por ser muito rá-
pida sua apresentação. Para que você possa ver o texto, vamos manipular a Thread no
momento de atualização do GridView1, fazendo com que leve ao menos três segundos.
Para isto, siga os próximos passos.
Figura 2.60.
System.Threading.Thread.Sleep(3000)
56 Universidade AJAX
capítulo
2
Figura 2.61.
56. Clique em Editar para qualquer projeto (altere o nome, por exemplo) e clique
em Atualizar. Deverá aparecer o texto “Atualizando”, conforme a Figura 2.62:
Figura 2.62.
Neste Capítulo você aprendeu como é fácil construir aplicações com AJAX uti-
lizando o framework AJAX ASP.NET e conheceu os seus principais controles.
AJAX ASP.NET 57
Capítulo 3
O controle UpdatePanel
No Capítulo anterior, você já utilizou o UpdatePanel e pôde comprovar os bene-
fícios que ele proporciona às suas aplicações.
Usando o UpdadePanel, você pode atualizar partes específicas da página, sem a
necessidade de usar nenhum código Javascript. Assim, você tem uma boa redução
no tráfico entre navegador cliente e servidor, diminuindo o uso de banda.
Lembre-se: assim como os demais controles, o UpdatePanel, trabalha em con-
junto com o controle ScriptManager, então o mesmo deve estar ou ser adicionado
na página quando você for utilizar o UpdatePanel.
Neste Capítulo, faremos uma prática em que você aprenderá:
• usar triggers;
• trabalhar com vários UpdatePanel em uma mesma página;
• usar UpdatePanel aninhados;
• atualizar e criar UpdatePanel programaticamente;
• conhecer os controles que não são compatíveis com o UpdatePanel.
1. Crie uma nova aplicação usando o Template ASP.NET AJAX - Enabled Web
Site chamada UpdatePanel, como mostra a imagem a seguir. Neste exemplo, usare-
mos a linguagem C#.
Figura 3.1.
60 Universidade AJAX
capítulo
3
Figura 3.2.
TextBox1.Text = DateTime.Now.ToString();
TextBox2.Text = DateTime.Now.ToString();
Para a linguagem Visual Basic, você pode usar a mesma linguagem só que sem
o ponto-e-vírgula. Desta forma:
TextBox1.Text = DateTime.Now.ToString()
TextBox2.Text = DateTime.Now.ToString()
Esse código tem por objetivo atribuir o valor da data e hora atual nas duas caixas
de texto. Seu painel de código deve estar como na Figura 3.3:
O controle UpdatePanel 61
Figura 3.3.
Figura 3.4.
62 Universidade AJAX
6. Adicione um controle UpdatePanel na página Default.aspx e mova os controles
TextBox2 e Button1 para dentro do mesmo, conforme a Figura 3.5:
capítulo
3
Figura 3.5.
7. Execute a aplicação.
8. Clique sobre o botão e, perceba que agora, apenas a caixa de texto que está
dentro do UpdatePanel é executada. Temos então um carregamento assíncrono dentro
do UpdatePanel usando AJAX (Figura 3.6).
Figura 3.6.
O controle UpdatePanel 63
Qualquer controle dentro de um UpdatePanel dispara uma atualização assín-
crona, ou seja, uma atualização apenas dentro do UpdatePanel. Se a propriedade
ChildrenAsTrigger estiver com valor true, esta propriedade será sempre true
por padrão. Se você deixar essa propriedade como false, os controles dentro do
UpdatePanel não chamarão uma atualização assíncrona.
É muito difícil alterarmos a propriedade ChildrenAsTrigger, porque geralmente
pelo menos um dos controles dentro do UpdatePanel é usado para solicitar atualiza-
ção assíncrona. No entanto, algumas vezes precisamos que um controle específico
que está dentro do UpdatePanel não chame uma atualização assíncrona. Você vai
ver como fazer isso agora.
Figura 3.7.
Figura 3.8.
64 Universidade AJAX
Perceba que são exibidas duas opções: AsyncPostBackTrigger e PostBackTrigger.
13. Em ControlID, selecione o controle Button1, como mostra a Figura 3.9 a capítulo
seguir: 3
Figura 3.9.
Note no código anterior que a tag <Triggers> é quem faz referência ao controle
que não vai disparar uma atualização assíncrona.
O controle UpdatePanel 65
Perceba que, ao clicar no botão, toda a página é atualizada novamente, pois as
duas caixas de texto são atualizadas com a data.
17. Arraste o Button1 para fora do UpdatePanel, como mostra a Figura 3.10:
Figura 3.10.
18. Da mesma forma que você pode usar uma trigger para fazer com que um
controle dentro do UpdatePanel não chame uma atualização assíncrona, você pode
também usar uma trigger para fazer com que um controle fora do UpdatePanel
execute uma atualização assíncrona. Para isto, clique novamente sobre o UpdatePa-
nel1 para selecioná-lo e, na janela Properties, localize e clique sobre a propriedade
Triggers.
66 Universidade AJAX
capítulo
3
Figura 3.11.
Figura 3.12.
Assim, toda vez que o evento Click do Button1 for disparado, será solicitada uma
atualização assíncrona.
O HTML do UpdatePanel deve estar agora semelhante a esse:
O controle UpdatePanel 67
<Triggers>
<asp:AsyncPostBackTrigger ControlID =”Button1”
EventName=”Click” />
</Triggers>
</asp:UpdatePanel>
Note no código anterior que a tag <Triggers> é quem faz referência ao controle
e ao evento que dispara a atualização assíncrona.
Figura 3.13.
23. Execute a aplicação. Perceba que sempre que você clica no Button1 os dois
UpdatePanel são atualizados (Figura 3.14).
68 Universidade AJAX
capítulo
3
Figura 3.14.
Figura 3.15.
Quando a propriedade UpdateMode está definida como always – que, por sinal, é
o valor padrão –, qualquer controle na página que dispara uma atualização assíncrona
atualiza o UpdatePanel em questão. Quando esta mesma propriedade foi definida
como Conditional, apenas os controles dentro do mesmo ou com trigger apontada
para o mesmo efetuam atualização assíncrona.
Não há limite em relação ao número de UpdateControls a serem utilizados em
uma página.
O controle UpdatePanel 69
25. Execute a aplicação. Agora, ao clicar no botão, apenas o UpdatePanel1 deve
ser atualizado (Figura 3.16).
Figura 3.16.
Figura 3.17.
70 Universidade AJAX
A regra aqui é simples: se os dois controles UpdatePanel estiverem com a pro-
priedade UpdateMode com o valor Conditional, ao clicar no botão dentro do Upda-
tePanel filho, ou seja, aquele que está dentro do outro, apenas este será atualizado.
Já o UpdatePanel pai, sempre atualizará a si mesmo e a todos os UpdatePanel que
estiverem dentro dele. capítulo
3
28. Certifique-se que a propriedade UpdateMode dos dois controles UpdatePanel
estejam como Conditional.
30. Adicione mais um Button à sua aplicação fora de qualquer UpdatePanel, como
mostra a Figura 3.18 a seguir:
Figura 3.18.
O controle UpdatePanel 71
Se você executar sua página agora, esse botão não fará nenhuma solicitação
assíncrona. Ao clicar sobre ele, a página é completamente atualizada.
31. Dê um clique duplo sobre o Button que você acabou de adicionar e digite o
seguinte código no procedimento de evento do mesmo:
UpdatePanel1.Update();
Isso ainda não é o suficiente para realizar uma atualização assíncrona, precisamos
registrar o controle como uma trigger. Fazemos isso adicionando o seguinte código
no procedimento de evento Page_Load:
ScriptManager1.RegisterAsyncPostBackControl(Button3);
32. Execute sua aplicação e teste. Agora, você já é capaz de chamar uma atuali-
zação assíncrona programaticamente.
up1.ID = “UpdatePanel1”;
up1.UpdateMode = UpdatePanelUpdateMode.Conditional;
Button1.ID = “Button1”;
Button1.Text = “Button”;
Button1.Click += new EventHandler(Button1 _ Click);
TextBox1.ID = “TextBox1”;
up1.ContentTemplateContainer.Controls.Add(Button1);
up1.ContentTemplateContainer.Controls.Add(TextBox1);
72 Universidade AJAX
Page.Form.Controls.Add(up1);
}
Figura 3.19.
O controle UpdatePanel 73
up1.ID = “UpdatePanel1”
up1.UpdateMode = UpdatePanelUpdateMode.Conditional
Button1.ID = “Button1”
Button1.Text = “Button”
AddHandler Button1.Click, AddressOf Button1 _ Click
TextBox1.ID = “TextBox1”
up1.ContentTemplateContainer.Controls.Add(Button1)
up1.ContentTemplateContainer.Controls.Add(TextBox1)
Page.Form.Controls.Add(up1)
End Sub
Figura 3.20.
74 Universidade AJAX
Fizemos isso com o código a seguir:
up1.ID = “UpdatePanel1”;
up1.UpdateMode = UpdatePanelUpdateMode.Conditional;
Button1.ID = “Button1”;
TextBox1.ID = “TextBox1”;
A propriedade Text do Button1 foi modificada para Button apenas para o botão
no exemplo não ser exibido em branco.
Button1.Text = “Button”;
O controle UpdatePanel 75
up1.ContentTemplateContainer.Controls.Add(Button1);
up1.ContentTemplateContainer.Controls.Add(TextBox1);
Page.Form.Controls.Add(up1);
Nesses exemplos, você já deve ter percebido o poder e o que você será capaz de
fazer facilmente utilizando o UpdatePanel. Para finalizar, existem alguns controles
que não podem ser utilizados dentro do UpdatePanel. Segue uma descrição deles,
além de algumas regras a serem seguidas:
• TreeView, Menu, Substitution e WebParts;
• FileUpload;
• GridView e DetaisView, quando estiverem com a propriedade EnableSorting,
AndPagingCallbacks com o valor true;
• os controles Login, PasswordRecovery, ChangePassword e CreateUserWizard
só podem ser usados se forem convertidos em Templates;
• os controles BaseCompareValidator, BaseValidator, CompareValidator,
CustomValidator, RangeValidator, RegularExpressionValidator, Requere-
dFieldValidator e ValidationSummary só podem ser usados se estiverem com
a propriedade EnableClientScript como false.
76 Universidade AJAX
Capítulo 4
O controle UpdateProgress
O controle UpdateProgress sempre funciona associado a um UpdatePanel e sua
função é exibir informações sobre o progresso de atualização assíncronas, ou seja,
atualizações AJAX.
1. Crie uma nova aplicação usando o template ASP.NET AJAX - Enabled Web
Site chamada UpdateProgress, como mostra figura a seguir. Neste exemplo, usarei
a linguagem VB.NET.
Figura 4.1.
4. Organize os controles como a Figura 4.2, sendo que o controle Label1 está
fora de qualquer UpdatePanel, o Label2 e o Button1 estão dentro do UpdatePanel1
e o Label3 e o Calendar estão dentro do UpdatePanel2.
78 Universidade AJAX
capítulo
4
Figura 4.2.
Label1.Text = DateTime.Now.ToString
Label1.Text = DateTime.Now.ToString();
6. Este mesmo código deve ser digitado para o evento Click, do controle Button1,
e para o evento SelectionChanged, do controle Calendar1, mudando apenas o La-
bel1 para Label2 e Label3, respectivamente. Para criar os procedimentos de evento
necessários, você pode dar um clique duplo sobre o Button1 e fazer o mesmo para
o controle Calendar, depois apenas digite o código. Seu painel de código deve ficar
como mostra a Figura 4.3:
O controle UpdateProgress 79
Figura 4.3.
Figura 4.4.
80 Universidade AJAX
8. Adicione um controle UpdateProgress logo abaixo do Label1. Dentro deste
UpdateProgress, digite o texto Aguarde..., como mostra a Figura 4.5:
capítulo
4
Figura 4.5.
9. Se você executar o exemplo agora, não notará diferença alguma. Isto porque o
processamento assíncrono que está sendo realizado é bem simples – apenas trazer a
data e a hora e adicionar no label – e rápido. Para visualizarmos o uso do UpdatePro-
gress, vamos utilizar o método Sleep da classe Thread que está no namespace System.
Threading para fazer com que o processamento assíncrono demore três segundos.
Para isto, adicione a seguinte linha de código dentro dos métodos Button1_Click e
Calendar1_SelectionChanged:
System.Threading.Thread.Sleep(3000)
System.Threading.Thread.Sleep(3000);
O controle UpdateProgress 81
Figura 4.6.
Figura 4.7.
82 Universidade AJAX
Agora sim, ao executar uma atualização assíncrona o texto Aguarde... é exibido
durante três segundos (3.000 milissegundos), o tempo que a atualização leva para
ser processada. O UpdateProgress é muito útil quando trazemos informações de
um banco de dados que pode levar alguns segundos, informando ao usuário que a
solicitação dele já está sendo efetuada.
Perceba que a mensagem leva um tempo para aparecer. Você pode configurar
esse “delay” usando a propriedade DisplayAfter. O valor padrão desta propriedade
é 500 milissegundos.
capítulo
Você também pode adicionar dentro do controle UpdateProgress o código HTML, 4
para a exibição de uma imagem, por exemplo.
Figura 4.8.
O controle UpdateProgress 83
Figura 4.9.
Figura 4.10.
84 Universidade AJAX
capítulo
4
Figura 4.11.
15. Execute a aplicação e perceba que agora, para cada UpdatePanel, é exibido
um texto diferente de acordo com o UpdateProgress associado.
Você deve ter compreendido agora que, ao fazer uma chamada assíncrona no
momento que outra já está sendo executada, por padrão, a nova chamada é execu-
tada, cancelando a antiga.
Para finalizar, vamos demonstrar o uso do UpdateProgress, dentro do Update-
Panel. Para isso:
Figura 4.12.
O controle UpdateProgress 85
2. Para finalizar, execute e teste a aplicação.
86 Universidade AJAX
Capítulo 5
O controle Timer
O controle Timer permite a atualização da página em intervalos de tempo de-
finidos.
Neste Capítulo, faremos uma prática onde você entenderá o que é, e como utilizar
o controle Timer.
1. Crie uma nova aplicação usando o Template ASP.NET AJAX - Enabled Web Site
chamada Timer, como mostra a Figura 5.1. Neste exemplo, usarei a linguagem C#.
Figura 5.1.
88 Universidade AJAX
capítulo
5
Figura 5.2.
O controle Timer 89
Figura 5.3.
Figura 5.4.
90 Universidade AJAX
OBSERVAÇÃO
7. Execute e teste sua aplicação. Perceba que a aproximadamente cada três se-
gundos é atualizada a data e a hora no Label1.
Quando digo “aproximadamente”, é isso mesmo. Você vai entender por que
agora:
capítulo
5
8. Adicione o seguinte código dentro do procedimento de evento Timer1_Tick,
como mostra a Figura 5.5 logo a seguir:
System.Threading.Thread.Sleep(3000);
System.Threading.Thread.Sleep(3000)
Figura 5.5.
O controle Timer 91
Este código não é novidade para você a esta altura do livro. Novamente, vamos
retardar um pouco o processamento do método por motivos didáticos.
9. Execute sua aplicação. Perceba que a atualização é executada a cada seis se-
gundos, e não três como configuramos na propriedade Interval.
Isso acontece sempre que o controle Timer estiver dentro do UpdatePanel. A
contagem é iniciada sempre que a antiga solicitação é finalizada. Como no nosso
exemplo, este tempo é de três segundos, ele foi somado ao tempo do controle Timer.
Mas, em nossas aplicações dificilmente, sabemos o tempo exato que vai levar uma
atualização assíncrona porque ela depende do volume de dados que está sendo tra-
fegado e da utilização de banda.
10. Com o objetivo de realizar a atualização a exatamente cada três segundos, vamos
arrastar o controle Timer1 para fora do UpdatePanel, como mostra a Figura 5.6:
Figura 5.6.
11. Como um controle qualquer, como um Button, por exemplo, para que o con-
trole Timer efetue uma chamada de atualização assíncrona em um UpdatePanel é
92 Universidade AJAX
necessário associá-los utilizando Trigger. Para isto, selecione o UpdatePanel e clique
sobre a propriedade Triggers. Na janela UpdatePanelTrigger, adicione uma AsyncPost
Back Trigger para o controle Timer1 e o evento Tick, como mostra a Figura 5.7:
capítulo
5
Figura 5.7.
12. Execute sua aplicação. Agora sim, a cada exatamente três segundos a atuali-
zação é efetuada. Fique atento, visualize a seguinte circunstância:
O controle Timer efetua uma atualização assíncrona a cada três segundos. Mas
uma das atualizações demora mais do que três segundos para ser finalizada. Então,
antes que a atualização acabe é iniciada uma outra. O que acontece com a primeira
que não acabou ainda? A resposta é: a primeira atualização, a que não finalizou
ainda, é terminada e a nova é iniciada.
Segue o código HTML do controle UpdatePanel1; atente para a propriedade
Trigger sendo configurada:
13. Pare a execução da sua aplicação e vamos agora compreender como trabalhar
com múltiplos UpdatePanel.
O controle Timer 93
14. Adicione mais um UpdatePanel e um Label dentro do mesmo, como mostra
a Figura 5.8:
Figura 5.8.
94 Universidade AJAX
capítulo
5
Figura 5.9.
18. Execute sua aplicação. Agora, a cada três segundos ambos UpdatePanel serão
atualizados usando apenas um único controle Timer.
Mas e se você precisar atualizar cada um dos UpdatePanel em intervalos de tempo
diferentes? Para responder esta pergunta, continuamos nosso exemplo.
Figura 5.10.
O controle Timer 95
20. Modifique a propriedade Trigger do UpdatePanel2 para o controle Timer2,
como mostra a Figura 5.11:
Figura 5.11.
21. Dê um clique duplo sobre o controle Timer2. Mova o código que atualiza o
Label2 para dentro do mesmo, como mostra a Figura 5.12:
Figura 5.12.
96 Universidade AJAX
22. Altere a propriedade Interval do controle Timer2 para 5.000 (cinco segundos)
(Figura 5.13).
capítulo
5
Figura 5.13.
23. Execute sua aplicação. Agora, o UpdatePanel1 é atualizado a cada três se-
gundos e o UpdatePanel2 é atualizado a cada cinco segundos.
Com esse exemplo concluído, você é capaz de utilizar o controle Timer em suas
aplicações AJAX ASP.NET.
O controle Timer 97
Capítulo 6
A classe PageRequestManager
Até agora, em todos os nossos exemplos não usamos Javascript ou DOM, mas
eles podem ser necessários nas seguintes circunstâncias:
• controlar como múltiplas atualizações assíncronas são processadas. Por padrão,
a última atualização sobrepõe à primeira, mas podemos controlar isso usando
Javascript e DOM;
• disponibilizar informações sobre a atualização assíncrona que está sendo exe-
cutada. Isso melhora a experiência do usuário com a página, principalmente
quando temos múltiplos controles UpdatePanel;
• possibilidade de cancelar uma atualização assíncrona enquanto a mesma é
processada;
• exibir mensagens de erro customizadas;
• enviar informações para o servidor de controle que não está sendo usado na
atualização assíncrona. Um exemplo seria enviar para o servidor o valor de um
TextBox que está fora de um UpdatePanel que está sendo processado. Isto per-
mite que o valor do TextBox seja utilizado no código que está sendo processado
no servidor, e influencia o resultado da atualização assíncrona.
1. Crie uma nova aplicação usando o Template ASP.NET AJAX - Enabled Web
Site chamada PageRequestManager, como mostra imagem a seguir. Neste exemplo,
usarei a linguagem C#.
Figura 6.1.
capítulo
6
Figura 6.2.
System.Threading.Thread.Sleep(3000);
Label1.Text = DateTime.Now.ToString();
Figura 6.3.
Figura 6.4.
Esta tag representa o controle ScriptManager que está adicionado à nossa página.
Figura 6.5.
Sys.WebForms.PageRequestManager.getInstance().add _ initializeReque
st(Exibir);
Vamos executar nosso exemplo para compreender melhor o que este bloco faz.
Figura 6.6.
Isso quer dizer que quando a requisição assíncrona foi iniciada, ou seja, quando o
evento initializeRequest foi disparado, o método Exibir() foi executado. Você pode
e deve criar suas próprias funções para fazer uso deste evento nos seus programas.
Para compreender melhor sobre Javascript e DOM, consulte os Apêndices A e B.
<script type=”text/javascript”>
var prm = Sys.WebForms.PageRequestManager.
getInstance();
prm.add _ initializeRequest(Exibir);
function Exibir(){
alert(“InitializeRequest”);
}
</script>
Este código faz a mesma coisa que o anterior, mas separa um pouco melhor o
código, deixando-o mais claro e legível, facilitando assim a manipulação de outros
eventos, como faremos a seguir. Nele criamos uma variável chamada prm e atribuímos
a ela a instância da classe PageRequestManager. Para isto, usamos o método getIns-
tance(). Isso facilita o uso dos eventos porque usamos a variável com a instância
do método para atribuir o método Exibir() ao evento initializeRequest.
capítulo
6
Figura 6.7.
prm.add _ beginRequest(Exibir2);
function Exibir2(){
alert(“BeginRequest”);
}
Figura 6.8.
14. Execute e teste sua aplicação. Agora após o evento initializeRequest é execu-
tado o evento beginRequest, como mostra a Figura 6.9:
Figura 6.9.
Os próximos três eventos que são executados sempre que uma solicitação assín-
crona é executada são os eventos: pageLoading, pageLoaded e endRequest. Vamos
demonstrá-los:
prm.add _ pageLoaded(Exibir4);
function Exibir4(){
alert(“PageLoaded”);
}
prm.add _ endRequest(Exibir5);
function Exibir5(){
alert(“EndRequest”);
}
<script type=”text/javascript”>
var prm = Sys.WebForms.PageRequestManager.
capítulo
getInstance();
prm.add _ initializeRequest(Exibir); 6
function Exibir(){
alert(“InitializeRequest”);
}
prm.add _ beginRequest(Exibir2);
function Exibir2(){
alert(“BeginRequest”);
}
prm.add _ pageLoading(Exibir3);
function Exibir3(){
alert(“PageLoading”);
}
prm.add _ pageLoaded(Exibir4);
function Exibir4(){
alert(“PageLoaded”);
}
prm.add _ endRequest(Exibir5);
function Exibir5(){
alert(“EndRequest”);
}
</script>
16. Execute sua aplicação. Agora, para cada evento, você terá uma mensagem
exibida com o nome do mesmo. Isto demonstra claramente a ordem que os eventos
são executados e permite que você escolha qual evento será usado em suas aplicações
de acordo com sua necessidade.
Figura 6.10.
Figura 6.11.
Foi utilizado um controle HTML porque este botão só será utilizado no lado
cliente.
20. Selecione esse Button e mude a sua propriedade Value para Cancelar, como
mostra a Figura 6.12:
Figura 6.12.
function Cancelar(){
prm.abortPostBack();
}
Figura 6.13.
22. Ainda no HTML, localize o código do Button que está dentro do UpdatePro-
gress e modifique-o para o seguinte:
capítulo
6
Figura 6.14.
23. Execute e teste sua aplicação. Agora, se você clicar em Cancelar, a atualização
é parada imediatamente (Figura 6.15).
Figura 6.15.
function Exibir4(){
if (prm.get _ isInAsyncPostBack()){
alert(“PageLoaded”);
}
}
Figura 7.1.
<configSections>
<sectionGroup name =”system.web.extensions” type =”System.
Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.
Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31
bf3856ad364e35”>
<sectionGroup name=”scripting” type=”System.Web.Configuration.
ScriptingSectionGroup, System.Web.Extensions, Version=1.0.61025.0,
Culture=neutral, PublicKeyToken=31bf3856ad364e35”>
<section name=”scriptResourceHandler” type=”System.Web.
Configuration.ScriptingScriptResourceHandlerSection, System.Web.
Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31
bf3856ad364e35” requirePermission=”false” allowDefinition=”Machine
ToApplication”/>
capítulo
Observe, na Figura 7.2 a seguir, o local exato onde o código deve ser inserido:
7
Figura 7.2.
<controls>
<add tagPrefix=”asp” namespace=”System.Web.UI”
assembly=”System.Web.Extensions, Version=1.0.61025.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35”/>
</controls>
Observe, na Figura 7.3 a seguir, o local exato onde o código deve ser inserido:
Figura 7.3.
<assemblies>
<add assembly =”System.Web.Extensions,
Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e
35”/>
</assemblies>
</compilation>
<httpHandlers>
<remove verb=”*” path=”*.asmx”/>
<add verb=”*” path=”*.asmx” validate=”false”
type=”System.Web.Script.Services.ScriptHandlerFactory, System.Web.
Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31
bf3856ad364e35”/>
< a d d v e r b = ” * ” p a t h = ” * _ A p p S e r v i c e.
a x d ” v a l id at e = ”fa l s e” ty p e = ”Sy s t e m.W e b.Sc r i p t.S e r v ic e s.
ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0,
Culture=neutral, PublicKeyToken=31bf3856ad364e35”/>
<add verb =”GET,HEAD” path =”ScriptResource.
axd” type=”System.Web.Handlers.ScriptResourceHandler, System.Web.
Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31
bf3856ad364e35” validate=”false”/>
</httpHandlers>
capítulo
<httpModules>
<add name =”ScriptModule” type =”System.Web. 7
Handlers.ScriptModule, System.Web.Extensions, Version=1.0.61025.0,
Culture=neutral, PublicKeyToken=31bf3856ad364e35”/>
</httpModules>
Observe na Figura 7.4 a seguir, o local exato onde o código deve ser inserido:
Observe na imagem que no código anterior também temos uma leve mudança na
tag <compilation>. Precisamos retirar a barra que encerra essa tag para inserir a
tag <assemblies>. A tag <compilation> fica assim:
1. Crie uma nova aplicação usando o Template ASP.NET AJAX - Enabled Web
Site chamada Web Services, como mostra a Figura 8.1. Neste exemplo, usarei a
linguagem VB.NET.
Figura 8.1.
2. Clique com o botão direito sobre o nome do projeto na janela Solution Explorer
e selecione Add New Item.
Figura 8.2.
4. Clique em Add.
capítulo
8
5. Para permitir que o Web Service seja acessado por script, você precisa adicionar
o atributo ScriptServiceAttribute à classe do mesmo. Para isto, adicione o seguinte
atributo acima do nome da classe:
<System.Web.Script.Services.ScriptService()> _
Em C#:
[System.Web.Script.Services.ScriptService]
<ScriptService()> _
[ScriptService]
6. Substitua a função HelloWorld que já está criada no Web Service pela função
Somar. Segue o código:
<WebMethod()> _
Public Function Somar(ByVal a As Integer, ByVal b As Integer) As
String
Return a + b
End Function
Em C#:
[WebMethod]
public string Somar(int a, int b)
{
return Convert.ToString(a + b);
}
Seu painel de código do Web Service deve estar assim (Figura 8.3):
Figura 8.3.
Figura 8.4.
É exibida a seguinte página no seu navegador (Figura 8.5) listando os métodos que es-
tiverem disponíveis para o acesso remoto. No nosso exemplo, apenas o método Somar. capítulo
8
Figura 8.5.
Figura 8.6.
9. Teste seu Web Service digitando um número para cada caixa de texto e clicando
em Chamar. O resultado é exibido em XML (Figura 8.7).
Figura 8.7.
10. Agora que nosso Web Service já está criado, volte para a página Default.aspx
e verifique se o controle ScriptManager já está adicionado à página; caso não esteja,
adicione o mesmo utilizando a guia AJAX Extensions na Toolbox.
Para utilizarmos um Web Service, ou seja, para conseguirmos chamar seus mé-
todos em nossa página, precisamos ter uma classe em Javascript com um método
correspondente ao que em questão.
Esta classe vai efetuar a chamada do Web Service e manipular a transferência
de dados. O AJAX ASP.NET, por meio do controle ScriptManager, cria esta classe
(conhecida como classe Proxy) em Javascript automaticamente, poupando nosso
trabalho e tempo.
11. Entretanto, para que o controle ScriptManager possa criar a classe Proxy para
o nosso Web Service precisamos fazer referência ao mesmo no próprio controle. Para
isso, clique sobre o controle ScriptManager para selecioná-lo e, na janela Properties,
localize a propriedade Services, como mostra a Figura 8.8:
capítulo
8
Figura 8.8.
12. Clique sobre as reticências (...) na propriedade Services para exibir a janela
ServiceReference e adicione o nome do arquivo do Web Service em Path, como
mostra a Figura 8.9:
Figura 8.9.
Figura 8.10.
Com você aprendeu no começo deste Capítulo com o uso dos Web Services nós temos
o desenvolvimento orientado para o navegador. Por isso, os Server Controls do ASP.NET
não são muito úteis nestas ocasiões e precisamos usar mais Javascript e DOM.
16. Adicione também um controle Label, que será usado apenas para apresentar
o resultado.
capítulo
Figura 8.11. 8
Por não ser um Web Control, este botão cria automaticamente uma função para
manipular o seu evento onclick em Javascript, como mostra o seguinte código:
// -->
</script>
Você poderia ter criado esta função sozinho e feito a referência no botão, mas o
Visual Studio 2005 ajuda nessa situação também, poupando um pouco de trabalho.
Na verdade, o Visual Studio 2005 só não ajuda muito quando trabalhamos com código
Javascript, mas na próxima versão desta ferramenta teremos muitas novidades que
irão aumentar muito a produtividade, quando no uso desta linguagem de script.
<script type=”text/javascript”>
<!--
// -->
</script>
Figura 8.12.
Figura 8.13.
Vamos analisar o código das funções Javascript para entender melhor o funcio- capítulo
namento. 8
Calcular.Somar(numero1,numero2, QuandoCompleta);
Perceba que, para chamar o método Somar, usamos a classe Calcular que foi
criada pelo ScriptManager. Neste método, passamos mais um valor, na verdade, uma
document.getElementById(‘Label1’).innerText = args;
Opcionalmente, podemos criar mais duas funções Javascript para ajudar no tra-
tamento de erros em chamadas a Web Services. Estas funções podem ser passadas
como parâmetro na chamada ao método do Web Service, como fizemos com a função
QuandoCompleta. Vamos compreender melhor como isso funciona seguindo com
o exemplo.
function QuantoErro(args) {
alert(“Houve um erro na chamada ao web service.”);
}
function QuandoTimeOut(args) {
alert(“A chamada ao serviço excedeu o tempo limite.”);
}
23. Altere a chamada ao método Somar, passando as duas novas funções, como
mostra o código a seguir:
24. Vamos simular um erro no nosso Web Service para ver a função QuantoErro
em ação. Para isto, volte ao painel de código do Web Service e adicione dentro do
método Somar o seguinte código: capítulo
8
Throw New Exception(“houve um erro”)
Em C#:
25. Execute sua aplicação e teste. A seguinte mensagem deve ser exibida
(Figura 8.16):
Figura 8.16.
Esta mensagem foi exibida porque dentro do método QuantoErro está o código:
Você pode personalizá-lo para que melhor se adapte à sua aplicação a partir do
código Javascript. O método QuandoTimeOut é executado quando o Web Service
excede o tempo de resposta.
1. Crie uma nova aplicação usando o Template ASP.NET AJAX - Enabled Web
Site chamada UpdatePanelAvancado, como mostra a Figura 9.1 a seguir. Neste
exemplo, usarei a linguagem C#.
Figura 9.1.
Primeiramente, vamos adicionar uma Master Page em nosso projeto. Para isso:
2. Na janela Solution Explorer, clique com o botão direito do mouse sobre o nome
do projeto e selecione Add New Item, como mostra a Figura 9.2:
Figura 9.2.
Figura 9.3.
4. Clique em Add.
<h1>Master Page</h1>
<hr />
capítulo
9
Figura 9.4.
6. Vá para o modo Design na Master Page, o conteúdo das páginas serão execu-
tados em lugar do ContentPlaceHolder, como mostra a Figura 9.5:
Figura 9.5.
7. Vamos agora excluir a página Default.aspx porque ela não faz referência à
Master Page. Para isto, clique com o botão direito sobre a página Default.aspx na
janela Solution Explorer e selecione Delete, como mostra a Figura 9.6 a seguir:
8. Clique com o botão direito sobre o nome do projeto e selecione Add New Item.
A opção Select master page faz com que uma nova caixa de diálogo seja exibida
após o clique no botão Add, permitindo a escolha de uma Master Page.
Figura 9.8.
Você pode ter mais do que uma Master Page em sua aplicação. A janela Select
a Master Page permite que você escolha qual Master Page será associada à página
Figura 9.9.
Figura 9.10.
Figura 9.11.
int a = Int32.Parse(TextBox1.Text);
int b = Int32.Parse(TextBox2.Text);
int res = a / b;
Label1.Text = res.ToString();
Em VB.NET:
capítulo
9
Figura 9.12.
17. Execute sua aplicação e teste. O resultado deve ser obtido de maneira assín-
crona, como se o controle ScriptManager estivesse diretamente na página Default.
aspx.
Figura 9.13.
Em VB.NET:
19. Execute e teste sua aplicação. Agora a atualização não deve ser assíncrona e
a página deve ser atualizada completamente a cada clique no botão.
Figura 9.15.
Figura 9.16.
23. Para gerar erro em nossa aplicação, basta solicitar uma divisão por zero, como
mostra a Figura 9.17:
Figura 9.17.
24. Agora, execute a aplicação sem o Debug para que o mesmo não intercepte e
faça a manipulação do erro. Para isto, você pode clicar em Ctrl + F5 ou, no menu
Debug, selecionar Start Without Debugging.
25. Faça novamente uma divisão por zero. O AJAX ASP.NET intercepta e trata o
erro, mas a mensagem (Figura 9.19) é genérica e pode não ser agradável ao usuário
final do seu projeto.
Figura 9.19.
try
{
int a = Int32.Parse(TextBox1.Text);
int b = Int32.Parse(TextBox2.Text);
int res = a / b;
Label1.Text = res.ToString();
}
catch (DivideByZeroException)
{
throw new Exception(“Você não pode efetuar uma divisão de
“ +
TextBox1.Text + “ por “ + TextBox2.Text);
}
Try
Dim a As Integer = TextBox1.Text
Dim b As Integer = TextBox2.Text
Dim res As Integer = a / b
Label1.Text = res.ToString()
Catch ex As Exception
Throw New Exception(“Você não pode efetuar uma divisão
de “ & TextBox1.Text & “ por “ & TextBox2.Text)
End Try
Figura 9.20.
27. Agora, novamente execute a aplicação sem o Debug para que o mesmo não
intercepte e faça a manipulação do erro. Para isto, você pode teclar Ctrl + F5 ou no
menu Debug selecionar Start Without Debugging.
Figura 9.21.
Agora você já sabe como criar mensagens de erros personalizadas para suas apli-
cações. Você pode usar todo o poder do bloco de tratamento de erros Try...Cath...
Finally como usa atualmente em suas aplicações ASP.NET.
Para finalizar, neste Capítulo vamos estudar o uso de Web User Controls em
nossas aplicações AJAX ASP.NET.
30. Clique com o botão direito sobre o nome do projeto e selecione Add New
Item.
31. Agora, em Templates, selecione Web User Control. Mude o nome do controle
para calendario.ascx. Certifique-se que esteja marcada a opção Place code in sepa-
rate file e clique em Add.
capítulo
9
Figura 9.22.
Figura 9.23.
Figura 9.24.
Figura 9.25.
Vamos criar um novo Web User Control para mostrarmos como funciona a se-
gunda opção.
capítulo
35. Adicione um segundo Web User Control ao projeto chamado ExibirData.ascx, 9
como mostra a Figura 9.26:
Figura 9.26.
Figura 9.27.
Label1.Text = DateTime.Now.ToLongTimeString();
Em VB.NET:
Label1.Text = DateTime.Now.ToLongTimeString()
38. Adicione o Web User Control que acabamos de criar à página Default.aspx,
como mostra a Figura 9.29:
capítulo
9
Figura 9.29.
Figura 9.30.
Figura 9.31.
40. Volte para o Web User Control ExibirData.ascx e adicione o seguinte código
dentro da classe:
Em VB.NET:
O painel de código do Web User Control deve ficar assim (Figura 9.32):
capítulo
9
Figura 9.32.
Figura 9.33.
Esta propriedade só está disponível aqui porque deixamo-la pública no Web User
Control.
this.ExibirData1.Update();
Em VB.NET:
me.ExibirData1.Update()
Este método também só está disponível porque o tornamos público no Web User
Control.
44. Execute e teste sua aplicação. A cada clique no botão, o controle ExibirData.
capítulo
ascx é atualizado, mas a página é completamente atualizada. 9
Isso acontece porque o controle Button2 é um Server Control e força uma atuali-
zação síncrona através de Post. Para resolver isto, basta adicionar este Button dentro
de um UpdatePanel que esteja na página ou arrastar mais um UpdatePanel para a
mesma e o colocar dentro dela.
46. Execute e teste sua aplicação. Agora, temos uma atualização AJAX, ou seja,
assíncrona sempre que o button2 é clicado, fazendo uma atualização em um Web
User Control.
1. Crie uma nova aplicação usando o Template ASP.NET AJAX - Enabled Web
Site chamada WebServiceAvancado, como mostra a Figura 10.1 a seguir. Neste
exemplo, usarei a linguagem C#.
Figura 10.1.
Figura 10.2.
4. Clique em Add.
OBSERVAÇÃO
capítulo
10
Quando você adiciona o ScriptManager na Master Page, todas as páginas
que a tiverem referenciado poderão utilizar o AJAX ASP.NET sem que você
precise arrastar o controle novamente dentro delas. Ou seja, o controle estará
disponível para todas as páginas referenciadas. Quando você adiciona o controle
ScriptManager apenas na página dentro do Content, nenhuma outra página
poderá utilizar o AJAX ASP.NET; a menos, é claro, que você também adicione
um controle ScriptManager dentro da página em questão.
<h1>
Master Page
</h1>
<hr />
Figura 10.3.
Este texto serve apenas se colocarmos algum conteúdo na Master Page, de forma
que, durante o exemplo, fique claro que algum conteúdo está sendo recuperado da
página Master Page.
Figura 10.4.
OBSERVAÇÃO
Você pode ter mais do que uma Master Page em sua aplicação. A janela Select
a Master Page permite que você escolha qual Master Page será associada à
capítulo
página que você está criando. A opção Select master page faz com que uma 10
nova caixa de diálogo seja exibida após o clique no botão Add, permitindo a
escolha de uma Master Page.
12. Na janela Solution Explorer clique com o botão direito sobre o nome do
projeto e selecione Add New Item.
13. Em Templates, selecione Web Service. Certifique-se que a opção Place code
in separate file esteja selecionada, como mostra a Figura 10.6:
Figura 10.6.
15. Novamente, clique com o botão direito sobre o nome do projeto e selecione
Add New Item.
Figura 10.7.
capítulo
Figura 10.8.
Em VB.NET:
Figura 10.9.
Vamos agora implementar o código do Web Service. Para permitir que o Web Ser- capítulo
vice seja acessado via Script você precisa adicionar o atributo ScriptServiceAttribute 10
à classe do mesmo. Este atributo está no namespace System.Web.Script.Services.
using System.Web.Script.Services;
Em VB.NET:
Imports System.Web.Script.Services
[ScriptService]
Em VB.NET:
<ScriptService()> _
[System.Web.Script.Services.ScriptService]
Em VB.NET:
<System.Web.Script.Services.ScriptService()> _
[WebMethod]
public Produto RecuperaProduto()
{
Produto p = new Produto();
p.Nome = “Produto1”;
p.Descricao = “Descricao”;
p.Quantidade = 30;
return p;
}
Em VB.NET:
<WebMethod()> _
Public Function RecuperaProduto() As Produto
Dim p As New Produto
p.Nome = “Produto1”
p.Descricao = “Descricao”
p.Quantidade = 30
Return p
End Function
Figura 10.10.
Em VB.NET: capítulo
10
Dim p As New Produto
p.Nome = “Produto1”;
p.Descricao = “Descricao”;
p.Quantidade = 30;
Em VB.NET:
p.Nome = “Produto1”
return p;
Em VB.NET:
Return p
Para que você compreenda como centralizar seu código Javascript em um arquivo
separado vamos criar agora um arquivo com a extensão .js.
23. Novamente, clique com o botão direito sobre o nome do projeto e selecione
Add New Item.
Figura 10.11.
capítulo
10
Figura 10.12.
A maior parte deste código não é novidade para você, entretanto, caso tenha dú-
vidas, consulte o Capítulo 8. Apenas fique atento ao parâmetro args que agora é um
objeto do tipo Produto que tem as mesmas propriedades que criamos no nosso Web
Service. Para recuperá-los, fazemos de forma idêntica a que estamos acostumados
em nossas aplicações ASP.NET, mas dessa vez em Javascript. Veja o código:
Figura 10.13.
Como você viu no Capítulo 8, para utilizarmos um Web Service em nossa página
precisamos fazer referência ao mesmo. Isto faz com que o AJAX ASP.NET 2.0 gere
o código necessário para que usemos a classe e os métodos do nosso Web Service
em nossas aplicações AJAX. Para isso:
30. Clique sobre as reticências (...) na propriedade Services para exibir a janela
ServiceReference Collection Editor e adicione o nome do arquivo do Web Service
em Path, como mostra a Figura 10.14:
capítulo
10
Figura 10.15.
32. Clique sobre as reticências (...) na propriedade Scripts para exibir a janela
ScriptReference e adicione o nome do arquivo de script, como mostra a Figura
10.16:
33. Antes de executar a aplicação, você precisa alterar o código HTML do Button1
adicionando o evento onclick com referência à função Javascript Button1_onclick que
está no arquivo de script. Segue como deve ficar o código HTML do Button1:
34. Execute sua aplicação. Clique no botão Atualizar. O nome do produto, descri-
ção e quantidade devem preencher as caixas de texto, como mostra a Figura 10.17:
35. Volte para a página Master Page e apague as referências tanto para o Web
Service quanto para o arquivo de script do controle ScriptManager. O código HTML
do seu controle ScritpManager deve ficar assim:
</asp:ScriptManager>
capítulo
10
Figura 10.18.
Figura 10.19.
Figura 10.20.
using System.Web.Services;
Em VB.NET:
Imports System.Web.Services
Em VB.NET:
[WebMethod]
public static String RecuperarHoraLoad()
{
return (string)HttpContext.Current.Session[“agora”];
}
Em VB.NET:
<WebMethod()> _
Public Shared Function RecuperarHoraLoad() As String
Return HttpContext.Current.Session(“agora”).ToString
End Function
Figura 10.21.
function RecuperarValorSessao()
{
PageMethods.RecuperarHoraLoad(QuandoCompleta2,QuantoErro,QuandoTi
meOut);
}
function QuandoCompleta2(args) {
alert(args)
}
function QuantoErro(args) {
alert(“Houve um erro na chamada.”);
}
function QuandoTimeOut(args) {
alert(“A chamada ao serviço excedeu o tempo limite.”);
}
A Figura 10.22 ilustra o arquivo JScript.js após a inclusão das novas funções:
capítulo
10
Figura 10.22.
PageMethods.RecuperarHoraLoad(QuandoCompleta2,QuantoErro,QuandoTi
meOut);
Figura 10.23.
45. Adicione mais um controle HTML do tipo Input (Button) na página Default.
aspx, como mostra a Figura 10.24:
Figura 10.24.
46. Altere o código HTML do Button2 adicionando o evento onclick com referên-
cia à função Javascript RecuperarValorSessao que está no arquivo de script. Segue
como deve ficar o código HTML do Button2:
capítulo
10
Figura 10.25.
Agora para finalizar, vamos apresentar alguns métodos que ajudam na manipu-
lação de erros em chamadas a Web Service.
alert(stackTrace);
alert(message);
alert(statusCode);
alert(exceptionType);
alert(timedout);
Figura 10.26.
Em VB.NET:
Figura 10.27.
Figura 10.28.
Figura 10.30.
Figura 10.31.
Figura 10.32.
Figura 11.1.
2. Localize o botão Download the Control Toolkit, como mostra a Figura 11.2:
Você deve ser direcionado à página do AJAX Control Toolkit no Portal CodePlex.
capítulo
11
Figura 11.3.
4. Serão exibidos os termos de licença e uso, como mostra a Figura 11.4 a seguir:
Figura 11.4.
5. Clique em I Agree.
Figura 11.5.
Figura 11.6.
Se você entrar na pasta ASP.NET 2.0 AJAX Extensions, vai localizar os arquivos
do AJAX ASP.NET, incluindo suas dlls, como mostra a Figura 11.7 a seguir:
capítulo
11
Figura 11.7.
Para descompactar o arquivo, vou usar o Assistente para extração do próprio Win-
dows XP SP2. No entanto, você pode usar o WinZIP ou WinRAR, como preferir.
Figura 11.8.
8. Clique em Avançar.
Figura 11.9.
Figura 11.11.
capítulo
11
Figura 11.12.
Figura 11.13.
Figura 11.15.
Figura 11.17.
1. Crie uma nova aplicação, mas, desta vez, ao invés de usar o Template ASP.
NET AJAX - Enabled Web Site, selecione o template AJAX Control Toolkit Web
Site, como mostra a Figura 11.18:
Figura 11.18.
capítulo
11
Figura 11.19.
Figura 11.20.
3. Na parte final da Toolbar, clique com o botão direito sobre a mesma selecio-
nando a opção Add Tab, como mostra a Figura 11.21:
Figura 11.21.
Figura 11.22.
5. Clique com o botão direito na guia que acabamos de criar e selecione a opção
Choose Items (Figura 11.23).
capítulo
11
Figura 11.23.
Figura 11.24.
Figura 11.25.
8. Clique em Open.
capítulo
11
Figura 11.27.
Figura 11.28.
Para usar o AJAX Control Toolkit você precisa ter o controle ScriptManager na
página porque utiliza a base do AJAX ASP.NET para seus controles, como mostra
a Figura anterior (Figura 11.28).
Label1.Text = DateTime.Now.ToLongTimeString()
Em C#:
Figura 11.29.
Para utilizar o AJAX Control Toolkit você não precisa necessariamente criar
sua aplicação usando o template AJAX Control Toolkit Web Site. Ao arrastar um
controle para a página, as dlls necessárias são adicionadas à pasta BIN do seu projeto
automaticamente.
13. A seguinte mensagem é exibida porque você criou o projeto usando o template
AJAX Control Toolkit Web Site. Quando você usa o template, a dll já é adicionada
capítulo
ao projeto na criação do mesmo. Selecione Apply to all items e clique em Yes (Figura
11
11.30).
Figura 11.30.
Figura 11.31.
Figura 11.32.
Figura 11.33.
capítulo
11
Figura 11.34.
Figura 11.35.
Se você clicar em Cancelar nada vai acontecer. Mas, ao clicar em OK, a ação definida
no evento Click do Button1 é executada, como mostra a Figura 11.36:
Figura 11.36.
Figura 11.37.
capítulo
11
Figura 11.38.
Figura 11.39.
Figura 11.40.
No nosso exemplo não temos conteúdo na página que permita o uso da barra de
rolagem, mas você já pode ver o painel posicionado no canto superior direito. Apenas
coloquei uma borda no painel para facilitar a visualização.
capítulo
11
Figura 11.42.
Figura 11.43.
No exemplo a seguir (Figura 11.44), a hora está sendo exibida no topo direito da
página. Não importa o conteúdo da página ou a rolagem da mesma, a hora vai ficar
sempre na mesma posição.
Figura 11.45.
capítulo
11
Figura 11.46.
Figura 11.47.
Figura 11.48.
Figura 11.49.
Figura 11.51.
Figura 11.52.
Figura 11.53.
Figura 11.54.
Figura 11.55.
Figura 11.56.
capítulo
11
Figura 11.57.
Figura 11.59.
Figura 11.60.
Figura 11.61.
Figura 11.62.
Figura 11.63.
Figura 11.64.
<script type=”text/javascript”>
//códigos JavaScript
</script>
<head>
<script type=”text/javascript” src=”externo.js”></script>
</head>
<head>
<script type=”text/javascript”>
//códigos JavaScript
</script>
</head>
<body>
<script type=”text/javascript”>
//códigos JavaScript
</script>
</body>
A tag <noscript>
Apêndice A 217
<script type=”text/javascript”>
alert(“Olá fulano.”);
</script>
<noscript>
<p>Olá fulano.</p>
</noscript>
Comentários em Javascript
<script type=”text/javascript”>
// Comentário de uma linha.
<head>
<script type=”text/javascript”>
<!--
//códigos JavaScript
//-->
</script>
</head>
Case Sensitive
Variáveis
ou
nomeVariavel = “valorVariavel”;
Você pode criar uma variável com ou sem a declaração var, mas é aconselhável
utilizá-la.
Quando criamos uma variável dentro de uma função, a tornamos local, ou seja,
acessível somente dentro da função em que foi criada. Já as variáveis globais, são
declaradas fora das funções e ficam acessíveis a toda e qualquer função na página
em que a variável esteja.
Apêndice A 219
Operadores
Operadores aritméticos
Operadores de relacionais
Menor ou igual <= a <= b Se o valor de a for menor ou igual que o valor
de b, então o resultado dessa expressão é verdadeiro,
senão é falso.
Operadores de atribuição
Operador condicional
Operador condicional é aquele que atribui um valor a uma determinada variá-
vel com base em uma condição, ou seja, se a condição for verdadeira, teremos um
valor x, caso contrário, um valor y.
Conheça a sintaxe desse tipo de condição:
Apêndice A 221
condicional, ou seja, se o valor da variável nota for maior ou igual a 60, teremos o
valor Aprovado, caso contrário, teremos Reprovado.
Estruturas de controle
Como o próprio nome diz, as estruturas de controle servem para controlar a
execução dos nossos programas. Elas são dividas em:
Estruturas de decisão
Declaração if
Sintaxe:
if (condição) {
//código a ser executado quando a condição for verdadeira.
}
Exemplo:
Declaração if...else
Sintaxe:
if (condição) {
//código a ser executado quando a condição for verdadeira.
} else {
//código a ser executado quando a condição for falsa.
}
Exemplo:
if (condição) {
//código a ser executado quando a condição for verdadeira.
} else if (2º condição) {
//código a ser executado quando a 2º condição for verdadeira.
} else {
//código a ser executado quando a primeira e a segunda condição
forem falsas.
}
Exemplo:
Apêndice A 223
switch(expressão) {
case valor 1:
//código a ser executado se a expressão = valor 1;
break
case valor 2:
//código a ser executado se a expressão = valor 2;
break
default:
//código a ser executado se a expressão for diferente do valor
1 e valor 2;
}
Exemplo:
Temos a variável estado com o valor PR. Iniciamos nossa declaração condicional
com o switch, passando a ele como parâmetro a expressão (variável) estado.
Então, utilizamos o case. Para isto, é necessário verificar o seguinte: se o valor
da variável for PR, exibimos um texto; se for SP, exibimos outro, e assim por diante;
se o valor da variável não coincidir com nenhum dos valores nos cases, exibimos um
texto padrão (default).
Estruturas de Repetição
Exemplo:
var numero = 1;
for (numero = 1; numero <= 10; numero++) {
alert(“Numero atual: “ + numero);
}
Loop while
Sintaxe:
Exemplo:
var numero = 1;
while (numero <= 10) {
alert(“Numero atual: “ + numero);
numero = numero + 1;
}
Conforme você pode ver no exemplo do loop while, o código é executado apêndice
enquanto a condição for verdadeira. A
Loop do...while
Sintaxe:
Apêndice A 225
do {
//código a ser executado.
} while (var <= valorFinal);
Exemplo:
var numero = 1;
do {
alert(“Número atual: “ + numero);
numero = numero + 1;
} while (numero < 1).
Break
O comando break interrompe a execução do loop. Exemplo:
Continue
O comando continue interrompe o loop em um determinado momento e con-
tinua com o mesmo:
Pop-up boxes
Alert
Exemplo:
Confirm
Exemplo:
Prompt
Exemplo:
Apêndice A 227
Figura Ap. A.3.
No comando prompt você pode sugerir uma resposta (Figura Ap. A.4). Exemplo:
Funções
function nomeDaFuncao() {
//códigos referente à função.
}
Exemplo:
function HelloWorld() {
alert(“Olá mundo.”);
}
// Exemplo para chamá-la.
<a href=”#” onclick=”javascript:HelloWorld();”>Chamar a Função</a>
Exemplo:
function HelloWorld(nome) {
alert(“Olá “ + nome);
}
// Exemplo para chamá-la.
<a href=”#” onclick=”javascript:HelloWorld(‘Moroni’);”>Chamar a
Função</a>
Esta mensagem pode ser personalizada uma vez que o parâmetro passado a ela
é o nome de algum usuário.
Quando queremos que uma função retorne algum valor, utilizamos a declaração
return, que tem o papel de especificar o valor retornado pela função.
Exemplo:
function calculo(valor1,valor2) {
total = valor1 * valor2;
return total;
}
// Chamando a função através do alert().
alert(calculo(23,5)); apêndice
A
Apêndice A 229
No exemplo anterior, chamamos a função calculo fornecendo a ela dois parâ-
metros: valor1 (23) e valor2 (5). Nesta função, temos a variável total que multiplica
os dois parâmetros informados e retorna o valor utilizando o return.
Eventos
onclick=”javascript:nomeDaFuncao(parametroSeHouver);”
• onload e onunload
O evento onload é executado quando uma página HTML é carregada por com-
pleto, incluindo as imagens. Já o evento onunload ocorre quando o usuário sai
de uma página. Eles são opostos entre si.
Exemplo:
• onmouseover e onmouseout
Enquanto o evento onmouseover é acionado quando o mouse se localiza na
área de um elemento, o onmouseout é executado quando o mouse sai dessa
área.
Exemplo:
onmouseover=”funcaoParaMouseOver();”
onmouseout=”funcaoParaMouseOut();”
• onsubmit
onsubmit=”return confereFormulario();”
O evento onclick também pode chamar uma função para validar um formulário,
assim como outros eventos.
• onfocus, onblur e onchange
Esses três eventos são utilizados na maioria das vezes em associação com algum
elemento de formulário.
O evento onfocus ocorre quando o usuário clica em um link ou em um campo
de texto e o foco é mantido até que outro elemento o ganhe.
Já o onblur é executado quando o elemento perde o foco.
O exemplo mais clássico para o evento onchange (ao trocar/mudar) é quando
alteramos uma opção na lista de um combobox. Nesta ação, ocorre o onchange.
Exemplos:
onfocus=”funcaoParaFocus();” onblur=”funcaoParaBlur();”
<select ... onchange=”funcaoParaChange();” ...>
Exemplos:
apêndice
onkeydown=”funcaoParaKeyDown();”
onkeypress=”funcaoParaKeyPress();” A
... onkeyup=”funcaoParaKeyUp();” ...
Apêndice A 231
Arrays
Ambos os exemplos anteriores estão corretos. A diferença entre eles é que o se-
gundo informa o tamanho (valor total) que o Array terá através do número inteiro
(integer) 11 (onze).
Agora, vamos conhecer duas formas para criarmos um Array.
Método Descrição
join() Coloca todos os elementos de um Array em uma string e os separam por um
delimitador especificado.
Data
Apêndice A 233
mes[3] = “Abril”;
mes[4] = “Maio”;
mes[5] = “Junho”;
mes[6] = “Julho”;
mes[7] = “Agosto”;
mes[8] = “Setembro”;
mes[9] = “Outubro”;
mes[10] = “Novembro”;
mes[11] = “Dezembro”;
Método Descrição
Date() Retorna a data e o horário atual.
getDate() Retorna o dia do mês (1-31).
getDay() Retorna o dia da semana (0-6).
getMonth() Retorna o mês (0-11).
getFullYear() Retorna o ano com quatro dígitos.
getHours() Retorna a hora (0-23).
getMinutes() Retorna os minutos (0-59).
getSeconds() Retorna os segundos (0-59).
getMilliseconds() Retorna os milissegundos (0-999).
getTimezoneOffset() Retorna a diferença em minutos entre o tempo local e o do
Meridiano de Greenwich (GMT).
// Outra forma
var data = new Date();
data.nomeDoMetodo();
String
No exemplo anterior, teremos o valor três nos dois casos (string literal – texto1;
objeto string – texto2) porque três é o total de caracteres contido em AJAX.
Método Descrição
indexOf() Retorna a posição da primeira ocorrência de um valor especificado em
uma string.
lastIndexOf() Retorna a posição da última ocorrência de um valor especificado em uma
string.
match() Procura por um valor específico em uma string. Se encontrado, ele (va-
lor) é retornado, caso contrário, retorna null.
replace() Substitue alguns caracteres por outros caracteres em uma string.
toLowerCase() Exibe os caracteres da string em minúsculos.
toUpperCase() Exibe os caracteres da string em maiúsculos. apêndice
Apêndice A 235
Math
O objeto Math disponibiliza diversos valores e funções para nos ajudar na rea-
lização de operações matemáticas. A seguir uma relação dos valores matemáticos
que podem ser acessados pelo objeto Math.
• floor()
Arredonda o valor informado para baixo até número inteiro mais próximo.
Exemplo:
• max()
Retorna o número de maior valor entre dois números especificados.
• random()
Retorna um número entre 0 e 1.
alert(Math.random());
alert(Math.random()*59);
// Exibirá números aleatórios entre 0 e 59 - Exemplo:
58.92792655560298
• round()
Arredonda o valor informado para o número inteiro mais próximo, seja positivo
ou negativo.
apêndice
A
Apêndice A 237
Apêndice B
DHTML e DOM
<script type=”text/javascript”>
function modificarClasse(nomeClasse) {
var obj = document.getElementById(“conteudo”);
obj.className = nomeClasse;
}
</script>
HTML:
CSS:
#conteudo {
width: 500px;
padding: 15px;
line-height: 1.5em;
}
.destaque {
apêndice
background-color: #666666;
B
Apêndice B 241
border: 1px solid #fc6c6c;
}
.nodestaque {
background-color: #ffffff;
border: 1px solid #000000;
}
Os métodos GetElementById
e GetElementByTagName
document.nomeDoFormulario.Telefone.value
document.getElementById(‘Telefone’).value
function ModificarEstiloLink() {
var links = document.getElementsByTagName(‘a’);
for(var x = 1; x < links.length; x++) {
var link = links[x];
link.style.textDecoration = ‘underline’;
}
}
function Ocultar(id) {
var obj = document.getElementById(id);
obj.style.display = “none”;
}
Apêndice B 243
A vantagem do método className é que podemos alterar as propriedades do
estilo na folha de estilo vinculada à página, ou seja, não precisamos alterar o script
quando desejarmos alterar o estilo e, sim, as propriedades da classe CSS.
Exemplo:
function Ocultar(id) {
var obj = document.getElementById(id);
obj.className = “OcultarObj”;
}
.OcultarObj {
display: none;
}
.OcultarObj {
visibility: hidden;
}
O método innerHtml
Para alterarmos ou inserirmos conteúdo ou uma marcação HTML em um objeto,
utilizamos o método innerHTML.
Imaginemos uma tag <div> em sua marcação HTML e que essa tag esteja com
o atributo ID definido como menu. Podemos utilizar o método getElementById
para acessá-la e o método innerHTML para manipular seu conteúdo ou marcação
HTML.
Exemplo de como alterar o conteúdo de uma tag:
Os métodos appendChild
e createElement
O método appendChild adiciona um nó (node, “filho”) ao final da lista de
filhos (children) de um elemento pai (parent node).
Exemplo:
Em primeiro lugar, definimos qual será o novo elemento ou a nova tag a ser
criada, nesse caso, a tag hr.
Na segunda linha, fizemos referência ao atributo ID de uma tag e esta será o pai do
novo elemento que será adicionado. Em seguida, utilizamos o método appendChild
informando a ele a tag que criamos na variável novoElemento.
Para concluir, a tag hr foi adicionada como filho do elemento cujo atributo ID
é igual a menu.
O método createElement é a solução quando você necessita criar um novo
elemento em sua marcação HTML, mas não há possibilidades de alterar a marcação
já existente e o novo elemento deve ser inserido mediante algum evento ocorrido na
página ou ocasionado pelo usuário.
Vejamos como utilizá-lo:
function novaTag(nTag) {
var conteudo = document.getElementById(“menu”);
var novoElemento = document.createElement(nTag);
novoElemento.appendChild(document.createTextNode(“Teste”));
conteudo.appendChild(novoElemento);
}
Apêndice B 245
Definimos qual será a nova tag a ser criada. Observe que essa informação é
oriunda de um parâmetro (nTag) da função em questão:
Os métodos insertBefore
e insertAfter
O método insertBefore é usado quando precisamos inserir algum elemento
em um local específico e não como o método appendChild, que insere o objeto
sempre como o último filho (child) de um elemeto pai (parent).
Exemplo:
<script type=”text/javascript”>
<!--
function inserirTag(nTag) {
var novoElemento = document.createElement(nTag);
novoElemento.appendChild(document.createTextNode(“Título”));
var referencia = document.getElementById(“paragrafo”);
var parentTag = referencia.parentNode;
parentTag.insertBefore(novoElemento, referencia);
}
//-->
</script>
<div id=”menu”>
<h1 id=”tit”>Titulo</h1>
</div>
Script utilizado:
<script type=”text/javascript”>
<!--
function inserirTag(nTag) {
var novoElemento = document.createElement(nTag);
novoElemento.appendChild(document.createTextNode(“Conteúdo do
novo elemento ...”));
var referencia = document.getElementById(“tit”);
var parentTag = referencia.parentNode;
parentTag.insertBefore(novoElemento, referencia.nextSibling);
}
//-->
</script>
apêndice
B
Apêndice B 247
Os métodos setAttribute
e getAttribute
O método setAttribute tem a finalidade de inserir ou modificar um atributo
em um elemento existente. A sintaxe do método compreende no seguinte:
setAttribute(‘nomeDoAtributo’,’valorDoAtributo’);
Exemplo:
<script type=”text/javascript”>
<!--
function novaTag(nTag) {
var conteudo = document.getElementById(“menu”);
var novoElemento = document.createElement(nTag);
novoElemento.appendChild(document.createTextNode(“Conteúdo do
novo elemento ...”));
novoElemento.setAttribute(‘id’,’titulo’);
novoElemento.setAttribute(‘class’,’destaque’);
conteudo.appendChild(novoElemento);
}
//-->
</script>
getAttribute(‘nomeDoAtributo’);
Exemplo:
<script type=”text/javascript”>
<!--
function mostrarAtributo() {
var elemento = document.getElementById(“titulo”);
var atributo = elemento.getAttribute(‘id’);
alert(atributo);
}
//-->
</script>
3. Na janela Visual Web Developers 2005 Express Edition Setup clique em Next
> para continuar o processo de instalação, como mostra a Figura Ap.C.1.
5. Em seguida, surgirá uma tela solicitando sobre o que deseja instalar. Deixe
marcada a opção Microsoft SQL Server 2005 Express Edition x86 (Download Size:
55 MB) para instalar o mesmo. Eu aconselho a instalação da documentação também.
Para isto, selecione a opção Microsoft MSDN 2005 Express Edition (Download Size:
248 MB), como mostra a Figura Ap.C.3.
Apêndice C 251
apêndice
C
6. Clique em Next > para continuar.
7. A tela seguinte (Figura Ap.C.4) exibe a pasta na qual será instalado o software e
também o espaço disponível no disco. Clique em Install > para iniciar a instalação.
Apêndice C 253
apêndice
C