Академический Документы
Профессиональный Документы
Культура Документы
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 So 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
Sumrio
Captulo 1
Entendendo o AJAX ...................................................... 9
O que o AJAX?..........................................................................................................10
A primeira funo .....................................................................................................19
A segunda funo ......................................................................................................20
A terceira funo .......................................................................................................21
Consideraes sobre o uso do AJAX .........................................................................22
Captulo 2
AJAX ASP.NET ........................................................... 25
Instalando o AJAX ASP.NET.....................................................................................26
Conhecendo o AJAX ASP.NET ................................................................................30
Captulo 3
O controle UpdatePanel .............................................. 59
Captulo 4
O controle UpdateProgress ......................................... 77
Captulo 5
O controle Timer ......................................................... 87
Captulo 6
A classe PageRequestManager ................................... 99
Captulo 7
Usando o AJAX ASP.NET em
aplicaes j existentes ............................................. 113
Captulo 8
Usando Web Services em suas
aplicaes AJAX ASP.NET ....................................... 119
Captulo 9
Aprofundando no uso do controle UpdatePanel ....... 133
Captulo 10
Aprofundando no uso de Web Services
e no desenvolvimento voltado para o
navegador (Cliente-Centric) ...................................... 157
Captulo 11
AJAX Control Toolkit ................................................ 183
Instalando o AJAX Control Toolkit ........................................................................184
Conhecendo o AJAX Control Toolkit ....................................................................193
O que o AJAX?
AJAX a abreviao de Asynchronous JavaScript and XML. No uma tecnologia,
e sim, uma metodologia, que utiliza vrios recursos e tecnologias, como Javascript,
DOM e XML. O objetivo do AJAX evitar que a cada solicitao do servidor a pgina
precise ser completamente recarregada. Para isto, usamos o objeto XMLHttpRequest,
por meio do Javascript, para intermediar todas as solicitaes ao servidor.
Vamos ver como isso funciona.
10 Universidade AJAX
captulo
1
Figura 1.1.
Nesse nosso primeiro exemplo, vamos criar uma aplicao cliente com Javascript
e o objeto XMLHttpRequest, que solicita ao servidor uma simples adio de dois
valores inteiros. Para isto, teremos duas pginas na nossa aplicao: uma que atuar
como o cliente e outra como servidor, que retornar o valor calculado.
2. Crie um novo formulrio para sua aplicao com o nome Default2.aspx. Para
isto, clique com o boto 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 opo Place code in separate
file (isso faz com que seja criado um arquivo separado para o cdigo da pgina) e
clique em Add.
Figura 1.3.
Figura 1.4.
12 Universidade AJAX
captulo
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
captulo
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>
<body onload=openAjax();>
Isso faz com que a funo Javascript openAjax() seja executada assim que a
pgina for carregada.
Isso permite que a funo 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 pgina em branco para que o evento Page_Load
seja criado e digite o seguinte cdigo:
16 Universidade AJAX
captulo
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 cdigo bem simples. Primeiro declaramos duas variveis do tipo Integer
e atribumos o valor 0 a elas.
Ento, verificamos se existe um parmetro A com valor. Se sim, atribumos esse
valor varivel. Fazemos o mesmo com o parmetro B. A ltima linha escreve a
soma dos valores das duas variveis. Esse texto ser recuperado pelo nosso programa
AJAX e atribudo caixa de texto necessria.
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 pgina Default.aspx e execute sua aplicao (para isto, voc pode
clicar em F5). A seguinte tela poder aparecer:
Figura 1.10.
18 Universidade AJAX
captulo
1
Figura 1.11.
Digite alguns nmeros 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 pgina. Isto AJAX. Usamos Javascript,
o objeto XMLHttpRequest e o DOM para fazer solicitaes ao servidor rodando
ASP.NET.
A primeira funo
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 funo.
Se estivermos trabalhando com o Internet Explorer, vamos adicionar o ActiveX
XMLHTTP varivel ajax que declaramos antes desta funo no Javascript. Se
for outro navegador, vamos atribuir o objeto XMLHttpRequest. Eles trabalham
de forma idntica.
A segunda funo
function atualizar() {
if (ajax.readyState==4) {
docu ment.getElementById(Text3).value = ajax.
responseText;
}
}
Voc pode utilizar o estgio 1 para exibir uma mensagem de carregando, por
exemplo, at que o estgio 4 esteja completo.
Uma outra propriedade que usamos nesta funo a responseText. Por meio
dela, atribumos o valor que est sendo retornado caixa de texto. Esta propriedade
sempre retorna uma string com os dados do servidor Web, mas, ao invs 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 Apndices A e B.
Temos tambm a propriedade onreadystatechange, que ser comentada
quando estudarmos a prxima funo.
O objeto XMLHttpRequest tem mais duas propriedades importantes que podem
ser bem teis em suas pginas. So elas: status e statusText.
20 Universidade AJAX
captulo
1
A terceira funo
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 funo pega os valores das duas primeiras caixas de texto e envia para a
pgina Default2.aspx como parmetro. A pgina 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
usurio e senha se o servidor Web necessitar de uma autenticao.
send(dados): envia a requisio, enviando opcionalmente os dados;
abort(): aborta uma requisio em atividade;
setRequestHeader(nome, valor): informa um cabealho (header) para a
requisio;
getResponseHeader(nome): retorna o valor do cabealho (header) informado;
getAllResponseHeaders(): retorna uma string contendo todos os cabealhos
(header).
Consideraes sobre
o uso do AJAX
Como voc percebeu, embora possa criar aplicaes com interfaces bem mais ricas
em AJAX, isto no 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 no, certos tipos de extenses que podem
influenciar na execuo do cdigo. Podemos ter ainda a situao de o Javascript,
simplesmente no estar habilitado no navegador do cliente.
Ento, voc vai precisar escrever o cdigo Javascript para cada uma das possi-
bilidades e test-las. Ainda assim, para os navegadores sem suporte, ao Javascript
ser necessrio o que chamamos de Javascript no-obstrutivo, ou seja, sua pgina
deve rodar sem os recursos do AJAX. Isso porque na Internet cada visitante um
potencial cliente e voc no pode eliminar potenciais clientes porque eles no tm
os recursos que voc precisa para que eles naveguem no seu site.
Para programar em Javascript tambm, no 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 preo. Com o ganho na
interface, temos uma perda de produtividade e isso no bom. Principalmente para
os programadores ASP.NET, que tm sua disposio 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
captulo
1
ningum 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 aplicaes ASP.NET,
foram criados vrios frameworks, ou seja, bibliotecas de cdigo Javascript que pode-
mos usar no desenvolvimento com AJAX. O Google tem um framework destes, mas
eles tambm no ajudam muito para quem desenvolve em ASP.NET usando o Visual
Studio.NET, pela difcil integrao com o mesmo. Atravs deles, perdemos o poder
dos Web Server Controls, como voc viu no exemplo que fizemos neste Captulo.
Tentando ajudar na produtividade dos programadores .NET, a Microsoft lan-
ou seu prprio 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 considervel
de produtividade.
A Microsoft tambm tem outras iniciativas para melhorar o desenvolvimento
com AJAX, principalmente com a verso futura do Visual Studio, que deve ajudar
na depurao de erros do Javascript.
Entendendo o AJAX 23
Captulo 2
AJAX ASP.NET
O objetivo deste captulo mostrar a voc o poder do framework AJAX ASP.
NET em suas aplicaes Web: como ele pode melhorar a produtividade e deixar suas
aplicaes mais interativas.
Figura 2.1.
26 Universidade AJAX
captulo
2
Figura 2.2.
Figura 2.3.
AJAX ASP.NET 27
Voc ser direcionado a uma pgina de download da Microsoft, como mostra a
Figura 2.4 a seguir:
Figura 2.4.
5. Clique no boto Download. Voc pode salvar este arquivo no seu disco rgido,
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
captulo
ser feito e a instalao 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
captulo
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 instrues usadas pelos
componentes ASP.NET AJAX. Nos prximos tpicos, voc vai conhecer estas alte-
raes e aprender a usar o AJAX ASP.NET em aplicaes Web j existentes.
Figura 2.11.
AJAX ASP.NET 31
Durante a instalao, o Assembly AJAX - ExtensionToolbox.DLL foi referenciado
na ToolBox do Visual Studio; o resultado disso a nova guia que voc tem disponvel
agora na sua Toolbox, como mostra a Figura 2.12:
Figura 2.12.
No modo Design, na pgina Default.aspx, voc nota mais uma diferena: 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
captulo
e controla todos os recursos AJAX na pgina. 2
3. Vamos agora adicionar um banco de dados ao nosso projeto. Para isso, na janela
Solution Explorer, clique com o boto 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
prtica, 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 boto 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
captulo
figura a seguir: 2
Figura 2.19.
8. Clique com o boto direito sobre ProjetoId e selecione Set Primary Key, como
mostra a prxima figura. Isso torna o campo ProjetoId a chave primria da nossa
tabela.
Figura 2.20.
AJAX ASP.NET 35
9. Ainda em ProjetoId, na janela Column Properties, marque a opo Yes na
propriedade (Is Identity), como mostra a Figura 2.21:
Figura 2.21.
10. Clique em Salvar. Surgir uma caixa de dilogo 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 boto direito sobre a tabela Projetos e selecione Show
Table Data (Figura 2.23).
36 Universidade AJAX
captulo
2
Figura 2.23.
Figura 2.24.
AJAX ASP.NET 37
13. Para realizar o acesso aos dados em nossas aplicaes, vamos utilizar um
Dataset tipado. H vrias tcnicas 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 invs de escolher a
opo SQL Database, selecione a opo 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
especfica. 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
captulo
2
Figura 2.27.
16. O prximo passo decidir se deseja que a string de conexo ao banco de dados
seja adicionada ao arquivo de configurao. 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 opo 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
captulo
2
Figura 2.31.
20. A janela Query Builder nos ajuda na criao dos comandos SQL. Selecione
ProjetoID, Nome e Completa, na tabela Projetos, e digite a clusula WHERE, como
mostra a Figura 2.32:
Figura 2.32.
22. A prxima janela exibe o comando SQL criado pelo Query Builder e permite
que voc faa ajustes, se necessrio. 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 prxima tela (Figura 2.34) voc pode escolher e nomear os mtodos que deseja
que o assistente crie para manipulao e recuperao dos dados.
Figura 2.34.
23. Para nosso exemplo, no vamos utilizar o mtodo Fill, ento desmarque esta
opo.
42 Universidade AJAX
24. Mude o nome do mtodo Return a DataTable para GetProjetosPorStatus,
captulo
como mostra a Figura 2.35. 2
Figura 2.35.
A prxima tela (Figura 2.36) resume todas as tarefas que sero 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 mtodo GetProjetosPorStatus. Para isto, clique com o boto
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):
captulo
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
captulo
2
Figura 2.43.
33. Selecione Object e, na opo 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 prximo passo do assistente permite que selecionemos o objeto TableAdapter.
O TableAdapter contm o mtodo que criamos para recuperar os dados da nossa
tabela. Ele foi criado quando criamos o Dataset.
34. Na tela seguinte, selecione a opo como mostra, a Figura 2.45 e, em seguida,
clique em Next >.
Figura 2.45.
Figura 2.46.
48 Universidade AJAX
captulo
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 tambm 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 aplicao, marque a propriedade AutoPostBack do
controle DropDownList1 como true. Seno ao selecionarmos uma opo no ser
disparado o Post que atualiza o GridView.
Perceba que cada vez que voc muda a opo do DropDownList1 a pgina
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
captulo
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 prximo
captulo
Captulo. Por enquanto, apenas entenda o seguinte: j que o DropDownList1 est 2
fora do UpdatePanel1, precisamos indicar ao mesmo que o DropDownList1 ser o
responsvel por realizar a chamada da atualizao 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
captulo
2
Figura 2.58.
52. Para finalizar, apenas quero apresentar para voc o controle UpdateProgress.
Para isto, adicione o mesmo sua pgina Default.aspx e digite dentro dele o texto
Atualizando, como mostra a Figura 2.59:
Figura 2.59.
AJAX ASP.NET 55
O contedo deste controle ser exibido enquanto a pgina recarregar algum dos
UpdatePanels. Como nosso exemplo bem simples e o recarregamento bem rpido,
se voc executar a pgina agora no vai conseguir visualizar o texto por ser muito r-
pida sua apresentao. Para que voc possa ver o texto, vamos manipular a Thread no
momento de atualizao do GridView1, fazendo com que leve ao menos trs segundos.
Para isto, siga os prximos passos.
Figura 2.60.
System.Threading.Thread.Sleep(3000)
56 Universidade AJAX
captulo
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 Captulo voc aprendeu como fcil construir aplicaes com AJAX uti-
lizando o framework AJAX ASP.NET e conheceu os seus principais controles.
AJAX ASP.NET 57
Captulo 3
O controle UpdatePanel
No Captulo anterior, voc j utilizou o UpdatePanel e pde comprovar os bene-
fcios que ele proporciona s suas aplicaes.
Usando o UpdadePanel, voc pode atualizar partes especficas da pgina, sem a
necessidade de usar nenhum cdigo Javascript. Assim, voc tem uma boa reduo
no trfico 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, ento o mesmo deve estar ou ser adicionado
na pgina quando voc for utilizar o UpdatePanel.
Neste Captulo, faremos uma prtica em que voc aprender:
usar triggers;
trabalhar com vrios UpdatePanel em uma mesma pgina;
usar UpdatePanel aninhados;
atualizar e criar UpdatePanel programaticamente;
conhecer os controles que no so compatveis com o UpdatePanel.
1. Crie uma nova aplicao 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
captulo
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-vrgula. Desta forma:
TextBox1.Text = DateTime.Now.ToString()
TextBox2.Text = DateTime.Now.ToString()
Esse cdigo tem por objetivo atribuir o valor da data e hora atual nas duas caixas
de texto. Seu painel de cdigo 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 pgina Default.aspx e mova os controles
TextBox2 e Button1 para dentro do mesmo, conforme a Figura 3.5:
captulo
3
Figura 3.5.
7. Execute a aplicao.
8. Clique sobre o boto e, perceba que agora, apenas a caixa de texto que est
dentro do UpdatePanel executada. Temos ento um carregamento assncrono dentro
do UpdatePanel usando AJAX (Figura 3.6).
Figura 3.6.
O controle UpdatePanel 63
Qualquer controle dentro de um UpdatePanel dispara uma atualizao assn-
crona, ou seja, uma atualizao apenas dentro do UpdatePanel. Se a propriedade
ChildrenAsTrigger estiver com valor true, esta propriedade ser sempre true
por padro. Se voc deixar essa propriedade como false, os controles dentro do
UpdatePanel no chamaro uma atualizao assncrona.
muito difcil alterarmos a propriedade ChildrenAsTrigger, porque geralmente
pelo menos um dos controles dentro do UpdatePanel usado para solicitar atualiza-
o assncrona. No entanto, algumas vezes precisamos que um controle especfico
que est dentro do UpdatePanel no chame uma atualizao assncrona. Voc vai
ver como fazer isso agora.
Figura 3.7.
Figura 3.8.
64 Universidade AJAX
Perceba que so exibidas duas opes: AsyncPostBackTrigger e PostBackTrigger.
13. Em ControlID, selecione o controle Button1, como mostra a Figura 3.9 a captulo
seguir: 3
Figura 3.9.
Note no cdigo anterior que a tag <Triggers> quem faz referncia ao controle
que no vai disparar uma atualizao assncrona.
O controle UpdatePanel 65
Perceba que, ao clicar no boto, toda a pgina atualizada novamente, pois as
duas caixas de texto so 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 no chame uma atualizao assncrona, voc pode
tambm usar uma trigger para fazer com que um controle fora do UpdatePanel
execute uma atualizao assncrona. 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
captulo
3
Figura 3.11.
Figura 3.12.
Assim, toda vez que o evento Click do Button1 for disparado, ser solicitada uma
atualizao assncrona.
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 cdigo anterior que a tag <Triggers> quem faz referncia ao controle
e ao evento que dispara a atualizao assncrona.
Figura 3.13.
23. Execute a aplicao. Perceba que sempre que voc clica no Button1 os dois
UpdatePanel so atualizados (Figura 3.14).
68 Universidade AJAX
captulo
3
Figura 3.14.
Figura 3.15.
Quando a propriedade UpdateMode est definida como always que, por sinal,
o valor padro , qualquer controle na pgina que dispara uma atualizao assncrona
atualiza o UpdatePanel em questo. Quando esta mesma propriedade foi definida
como Conditional, apenas os controles dentro do mesmo ou com trigger apontada
para o mesmo efetuam atualizao assncrona.
No h limite em relao ao nmero de UpdateControls a serem utilizados em
uma pgina.
O controle UpdatePanel 69
25. Execute a aplicao. Agora, ao clicar no boto, 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 boto 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. captulo
3
28. Certifique-se que a propriedade UpdateMode dos dois controles UpdatePanel
estejam como Conditional.
30. Adicione mais um Button sua aplicao fora de qualquer UpdatePanel, como
mostra a Figura 3.18 a seguir:
Figura 3.18.
O controle UpdatePanel 71
Se voc executar sua pgina agora, esse boto no far nenhuma solicitao
assncrona. Ao clicar sobre ele, a pgina completamente atualizada.
31. D um clique duplo sobre o Button que voc acabou de adicionar e digite o
seguinte cdigo no procedimento de evento do mesmo:
UpdatePanel1.Update();
ScriptManager1.RegisterAsyncPostBackControl(Button3);
32. Execute sua aplicao e teste. Agora, voc j capaz de chamar uma atuali-
zao assncrona 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 cdigo 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 boto
no exemplo no 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 no podem ser utilizados dentro do UpdatePanel. Segue uma descrio deles,
alm 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
Captulo 4
O controle UpdateProgress
O controle UpdateProgress sempre funciona associado a um UpdatePanel e sua
funo exibir informaes sobre o progresso de atualizao assncronas, ou seja,
atualizaes AJAX.
1. Crie uma nova aplicao 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 esto dentro do UpdatePanel1
e o Label3 e o Calendar esto dentro do UpdatePanel2.
78 Universidade AJAX
captulo
4
Figura 4.2.
Label1.Text = DateTime.Now.ToString
Label1.Text = DateTime.Now.ToString();
6. Este mesmo cdigo 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
necessrios, voc pode dar um clique duplo sobre o Button1 e fazer o mesmo para
o controle Calendar, depois apenas digite o cdigo. Seu painel de cdigo 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:
captulo
4
Figura 4.5.
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 atualizao assncrona o texto Aguarde... exibido
durante trs segundos (3.000 milissegundos), o tempo que a atualizao leva para
ser processada. O UpdateProgress muito til quando trazemos informaes de
um banco de dados que pode levar alguns segundos, informando ao usurio que a
solicitao 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 padro desta propriedade
500 milissegundos.
captulo
Voc tambm pode adicionar dentro do controle UpdateProgress o cdigo HTML, 4
para a exibio de uma imagem, por exemplo.
Figura 4.8.
O controle UpdateProgress 83
Figura 4.9.
Figura 4.10.
84 Universidade AJAX
captulo
4
Figura 4.11.
15. Execute a aplicao 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 assncrona no
momento que outra j est sendo executada, por padro, 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 aplicao.
86 Universidade AJAX
Captulo 5
O controle Timer
O controle Timer permite a atualizao da pgina em intervalos de tempo de-
finidos.
Neste Captulo, faremos uma prtica onde voc entender o que , e como utilizar
o controle Timer.
1. Crie uma nova aplicao 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
captulo
5
Figura 5.2.
O controle Timer 89
Figura 5.3.
Figura 5.4.
90 Universidade AJAX
OBSERVAO
7. Execute e teste sua aplicao. Perceba que a aproximadamente cada trs se-
gundos atualizada a data e a hora no Label1.
Quando digo aproximadamente, isso mesmo. Voc vai entender por que
agora:
captulo
5
8. Adicione o seguinte cdigo 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 cdigo no novidade para voc a esta altura do livro. Novamente, vamos
retardar um pouco o processamento do mtodo por motivos didticos.
9. Execute sua aplicao. Perceba que a atualizao executada a cada seis se-
gundos, e no trs como configuramos na propriedade Interval.
Isso acontece sempre que o controle Timer estiver dentro do UpdatePanel. A
contagem iniciada sempre que a antiga solicitao finalizada. Como no nosso
exemplo, este tempo de trs segundos, ele foi somado ao tempo do controle Timer.
Mas, em nossas aplicaes dificilmente, sabemos o tempo exato que vai levar uma
atualizao assncrona porque ela depende do volume de dados que est sendo tra-
fegado e da utilizao de banda.
10. Com o objetivo de realizar a atualizao a exatamente cada trs 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 atualizao assncrona em um UpdatePanel
92 Universidade AJAX
necessrio 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:
captulo
5
Figura 5.7.
12. Execute sua aplicao. Agora sim, a cada exatamente trs segundos a atuali-
zao efetuada. Fique atento, visualize a seguinte circunstncia:
O controle Timer efetua uma atualizao assncrona a cada trs segundos. Mas
uma das atualizaes demora mais do que trs segundos para ser finalizada. Ento,
antes que a atualizao acabe iniciada uma outra. O que acontece com a primeira
que no acabou ainda? A resposta : a primeira atualizao, a que no finalizou
ainda, terminada e a nova iniciada.
Segue o cdigo HTML do controle UpdatePanel1; atente para a propriedade
Trigger sendo configurada:
13. Pare a execuo da sua aplicao e vamos agora compreender como trabalhar
com mltiplos 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
captulo
5
Figura 5.9.
18. Execute sua aplicao. Agora, a cada trs segundos ambos UpdatePanel sero
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 cdigo 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).
captulo
5
Figura 5.13.
23. Execute sua aplicao. Agora, o UpdatePanel1 atualizado a cada trs se-
gundos e o UpdatePanel2 atualizado a cada cinco segundos.
Com esse exemplo concludo, voc capaz de utilizar o controle Timer em suas
aplicaes AJAX ASP.NET.
O controle Timer 97
Captulo 6
A classe PageRequestManager
At agora, em todos os nossos exemplos no usamos Javascript ou DOM, mas
eles podem ser necessrios nas seguintes circunstncias:
controlar como mltiplas atualizaes assncronas so processadas. Por padro,
a ltima atualizao sobrepe primeira, mas podemos controlar isso usando
Javascript e DOM;
disponibilizar informaes sobre a atualizao assncrona que est sendo exe-
cutada. Isso melhora a experincia do usurio com a pgina, principalmente
quando temos mltiplos controles UpdatePanel;
possibilidade de cancelar uma atualizao assncrona enquanto a mesma
processada;
exibir mensagens de erro customizadas;
enviar informaes para o servidor de controle que no est sendo usado na
atualizao assncrona. 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 cdigo que est sendo processado
no servidor, e influencia o resultado da atualizao assncrona.
1. Crie uma nova aplicao 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.
captulo
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 pgina.
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 requisio assncrona foi iniciada, ou seja, quando o
evento initializeRequest foi disparado, o mtodo Exibir() foi executado. Voc pode
e deve criar suas prprias funes para fazer uso deste evento nos seus programas.
Para compreender melhor sobre Javascript e DOM, consulte os Apndices A e B.
<script type=text/javascript>
var prm = Sys.WebForms.PageRequestManager.
getInstance();
prm.add _ initializeRequest(Exibir);
function Exibir(){
alert(InitializeRequest);
}
</script>
Este cdigo faz a mesma coisa que o anterior, mas separa um pouco melhor o
cdigo, deixando-o mais claro e legvel, facilitando assim a manipulao de outros
eventos, como faremos a seguir. Nele criamos uma varivel chamada prm e atribumos
a ela a instncia da classe PageRequestManager. Para isto, usamos o mtodo getIns-
tance(). Isso facilita o uso dos eventos porque usamos a varivel com a instncia
do mtodo para atribuir o mtodo Exibir() ao evento initializeRequest.
captulo
6
Figura 6.7.
prm.add _ beginRequest(Exibir2);
function Exibir2(){
alert(BeginRequest);
}
Figura 6.8.
14. Execute e teste sua aplicao. Agora aps o evento initializeRequest execu-
tado o evento beginRequest, como mostra a Figura 6.9:
Figura 6.9.
Os prximos trs eventos que so executados sempre que uma solicitao assn-
crona executada so 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.
captulo
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 aplicao. Agora, para cada evento, voc ter uma mensagem
exibida com o nome do mesmo. Isto demonstra claramente a ordem que os eventos
so executados e permite que voc escolha qual evento ser usado em suas aplicaes
de acordo com sua necessidade.
Figura 6.10.
Figura 6.11.
Foi utilizado um controle HTML porque este boto 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 cdigo do Button que est dentro do UpdatePro-
gress e modifique-o para o seguinte:
captulo
6
Figura 6.14.
23. Execute e teste sua aplicao. Agora, se voc clicar em Cancelar, a atualizao
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/>
captulo
Observe, na Figura 7.2 a seguir, o local exato onde o cdigo 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 cdigo 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>
captulo
<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 cdigo deve ser inserido:
Observe na imagem que no cdigo anterior tambm temos uma leve mudana 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 aplicao 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 boto direito sobre o nome do projeto na janela Solution Explorer
e selecione Add New Item.
Figura 8.2.
4. Clique em Add.
captulo
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 funo HelloWorld que j est criada no Web Service pela funo
Somar. Segue o cdigo:
<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 cdigo do Web Service deve estar assim (Figura 8.3):
Figura 8.3.
Figura 8.4.
exibida a seguinte pgina no seu navegador (Figura 8.5) listando os mtodos que es-
tiverem disponveis para o acesso remoto. No nosso exemplo, apenas o mtodo Somar. captulo
8
Figura 8.5.
Figura 8.6.
9. Teste seu Web Service digitando um nmero 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 pgina Default.aspx
e verifique se o controle ScriptManager j est adicionado pgina; caso no 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 pgina, precisamos ter uma classe em Javascript com um mtodo
correspondente ao que em questo.
Esta classe vai efetuar a chamada do Web Service e manipular a transferncia
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 referncia ao mesmo no prprio 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:
captulo
8
Figura 8.8.
12. Clique sobre as reticncias (...) 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 comeo deste Captulo com o uso dos Web Services ns temos
o desenvolvimento orientado para o navegador. Por isso, os Server Controls do ASP.NET
no so muito teis nestas ocasies e precisamos usar mais Javascript e DOM.
16. Adicione tambm um controle Label, que ser usado apenas para apresentar
o resultado.
captulo
Figura 8.11. 8
Por no ser um Web Control, este boto cria automaticamente uma funo para
manipular o seu evento onclick em Javascript, como mostra o seguinte cdigo:
// -->
</script>
Voc poderia ter criado esta funo sozinho e feito a referncia no boto, mas o
Visual Studio 2005 ajuda nessa situao tambm, poupando um pouco de trabalho.
Na verdade, o Visual Studio 2005 s no ajuda muito quando trabalhamos com cdigo
Javascript, mas na prxima verso desta ferramenta teremos muitas novidades que
iro 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 cdigo das funes Javascript para entender melhor o funcio- captulo
namento. 8
Calcular.Somar(numero1,numero2, QuandoCompleta);
Perceba que, para chamar o mtodo Somar, usamos a classe Calcular que foi
criada pelo ScriptManager. Neste mtodo, passamos mais um valor, na verdade, uma
document.getElementById(Label1).innerText = args;
Opcionalmente, podemos criar mais duas funes Javascript para ajudar no tra-
tamento de erros em chamadas a Web Services. Estas funes podem ser passadas
como parmetro na chamada ao mtodo do Web Service, como fizemos com a funo
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 servio excedeu o tempo limite.);
}
23. Altere a chamada ao mtodo Somar, passando as duas novas funes, como
mostra o cdigo a seguir:
24. Vamos simular um erro no nosso Web Service para ver a funo QuantoErro
em ao. Para isto, volte ao painel de cdigo do Web Service e adicione dentro do
mtodo Somar o seguinte cdigo: captulo
8
Throw New Exception(houve um erro)
Em C#:
25. Execute sua aplicao e teste. A seguinte mensagem deve ser exibida
(Figura 8.16):
Figura 8.16.
Esta mensagem foi exibida porque dentro do mtodo QuantoErro est o cdigo:
Voc pode personaliz-lo para que melhor se adapte sua aplicao a partir do
cdigo Javascript. O mtodo QuandoTimeOut executado quando o Web Service
excede o tempo de resposta.
1. Crie uma nova aplicao 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 boto 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 />
captulo
9
Figura 9.4.
6. V para o modo Design na Master Page, o contedo das pginas sero execu-
tados em lugar do ContentPlaceHolder, como mostra a Figura 9.5:
Figura 9.5.
8. Clique com o boto direito sobre o nome do projeto e selecione Add New Item.
A opo Select master page faz com que uma nova caixa de dilogo seja exibida
aps o clique no boto Add, permitindo a escolha de uma Master Page.
Figura 9.8.
Voc pode ter mais do que uma Master Page em sua aplicao. A janela Select
a Master Page permite que voc escolha qual Master Page ser associada pgina
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:
captulo
9
Figura 9.12.
17. Execute sua aplicao e teste. O resultado deve ser obtido de maneira assn-
crona, como se o controle ScriptManager estivesse diretamente na pgina Default.
aspx.
Figura 9.13.
Em VB.NET:
19. Execute e teste sua aplicao. Agora a atualizao no deve ser assncrona e
a pgina deve ser atualizada completamente a cada clique no boto.
Figura 9.15.
Figura 9.16.
23. Para gerar erro em nossa aplicao, basta solicitar uma diviso por zero, como
mostra a Figura 9.17:
Figura 9.17.
24. Agora, execute a aplicao sem o Debug para que o mesmo no intercepte e
faa a manipulao do erro. Para isto, voc pode clicar em Ctrl + F5 ou, no menu
Debug, selecionar Start Without Debugging.
25. Faa novamente uma diviso por zero. O AJAX ASP.NET intercepta e trata o
erro, mas a mensagem (Figura 9.19) genrica e pode no ser agradvel ao usurio
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 no pode efetuar uma diviso 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 no pode efetuar uma diviso
de & TextBox1.Text & por & TextBox2.Text)
End Try
Figura 9.20.
27. Agora, novamente execute a aplicao sem o Debug para que o mesmo no
intercepte e faa a manipulao 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-
caes. Voc pode usar todo o poder do bloco de tratamento de erros Try...Cath...
Finally como usa atualmente em suas aplicaes ASP.NET.
Para finalizar, neste Captulo vamos estudar o uso de Web User Controls em
nossas aplicaes AJAX ASP.NET.
30. Clique com o boto 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 opo Place code in sepa-
rate file e clique em Add.
captulo
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 opo.
captulo
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 pgina Default.aspx,
como mostra a Figura 9.29:
captulo
9
Figura 9.29.
Figura 9.30.
Figura 9.31.
40. Volte para o Web User Control ExibirData.ascx e adicione o seguinte cdigo
dentro da classe:
Em VB.NET:
O painel de cdigo do Web User Control deve ficar assim (Figura 9.32):
captulo
9
Figura 9.32.
Figura 9.33.
Esta propriedade s est disponvel aqui porque deixamo-la pblica no Web User
Control.
this.ExibirData1.Update();
Em VB.NET:
me.ExibirData1.Update()
Este mtodo tambm s est disponvel porque o tornamos pblico no Web User
Control.
44. Execute e teste sua aplicao. A cada clique no boto, o controle ExibirData.
captulo
ascx atualizado, mas a pgina completamente atualizada. 9
Isso acontece porque o controle Button2 um Server Control e fora uma atuali-
zao sncrona atravs de Post. Para resolver isto, basta adicionar este Button dentro
de um UpdatePanel que esteja na pgina ou arrastar mais um UpdatePanel para a
mesma e o colocar dentro dela.
46. Execute e teste sua aplicao. Agora, temos uma atualizao AJAX, ou seja,
assncrona sempre que o button2 clicado, fazendo uma atualizao em um Web
User Control.
1. Crie uma nova aplicao 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.
OBSERVAO
captulo
10
Quando voc adiciona o ScriptManager na Master Page, todas as pginas
que a tiverem referenciado podero utilizar o AJAX ASP.NET sem que voc
precise arrastar o controle novamente dentro delas. Ou seja, o controle estar
disponvel para todas as pginas referenciadas. Quando voc adiciona o controle
ScriptManager apenas na pgina dentro do Content, nenhuma outra pgina
poder utilizar o AJAX ASP.NET; a menos, claro, que voc tambm adicione
um controle ScriptManager dentro da pgina em questo.
<h1>
Master Page
</h1>
<hr />
Figura 10.3.
Este texto serve apenas se colocarmos algum contedo na Master Page, de forma
que, durante o exemplo, fique claro que algum contedo est sendo recuperado da
pgina Master Page.
Figura 10.4.
OBSERVAO
Voc pode ter mais do que uma Master Page em sua aplicao. A janela Select
a Master Page permite que voc escolha qual Master Page ser associada
captulo
pgina que voc est criando. A opo Select master page faz com que uma 10
nova caixa de dilogo seja exibida aps o clique no boto Add, permitindo a
escolha de uma Master Page.
12. Na janela Solution Explorer clique com o boto direito sobre o nome do
projeto e selecione Add New Item.
13. Em Templates, selecione Web Service. Certifique-se que a opo Place code
in separate file esteja selecionada, como mostra a Figura 10.6:
Figura 10.6.
15. Novamente, clique com o boto direito sobre o nome do projeto e selecione
Add New Item.
Figura 10.7.
captulo
Figura 10.8.
Em VB.NET:
Figura 10.9.
Vamos agora implementar o cdigo do Web Service. Para permitir que o Web Ser- captulo
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: captulo
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 cdigo Javascript em um arquivo
separado vamos criar agora um arquivo com a extenso .js.
23. Novamente, clique com o boto direito sobre o nome do projeto e selecione
Add New Item.
Figura 10.11.
captulo
10
Figura 10.12.
A maior parte deste cdigo no novidade para voc, entretanto, caso tenha d-
vidas, consulte o Captulo 8. Apenas fique atento ao parmetro 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 idntica a que estamos acostumados
em nossas aplicaes ASP.NET, mas dessa vez em Javascript. Veja o cdigo:
Figura 10.13.
Como voc viu no Captulo 8, para utilizarmos um Web Service em nossa pgina
precisamos fazer referncia ao mesmo. Isto faz com que o AJAX ASP.NET 2.0 gere
o cdigo necessrio para que usemos a classe e os mtodos do nosso Web Service
em nossas aplicaes AJAX. Para isso:
30. Clique sobre as reticncias (...) 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:
captulo
10
Figura 10.15.
32. Clique sobre as reticncias (...) 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 aplicao, voc precisa alterar o cdigo HTML do Button1
adicionando o evento onclick com referncia funo Javascript Button1_onclick que
est no arquivo de script. Segue como deve ficar o cdigo HTML do Button1:
34. Execute sua aplicao. Clique no boto 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 pgina Master Page e apague as referncias tanto para o Web
Service quanto para o arquivo de script do controle ScriptManager. O cdigo HTML
do seu controle ScritpManager deve ficar assim:
</asp:ScriptManager>
captulo
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 servio excedeu o tempo limite.);
}
A Figura 10.22 ilustra o arquivo JScript.js aps a incluso das novas funes:
captulo
10
Figura 10.22.
PageMethods.RecuperarHoraLoad(QuandoCompleta2,QuantoErro,QuandoTi
meOut);
Figura 10.23.
45. Adicione mais um controle HTML do tipo Input (Button) na pgina Default.
aspx, como mostra a Figura 10.24:
Figura 10.24.
46. Altere o cdigo HTML do Button2 adicionando o evento onclick com refern-
cia funo Javascript RecuperarValorSessao que est no arquivo de script. Segue
como deve ficar o cdigo HTML do Button2:
captulo
10
Figura 10.25.
Agora para finalizar, vamos apresentar alguns mtodos que ajudam na manipu-
lao 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 boto Download the Control Toolkit, como mostra a Figura 11.2:
Voc deve ser direcionado pgina do AJAX Control Toolkit no Portal CodePlex.
captulo
11
Figura 11.3.
4. Sero exibidos os termos de licena 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:
captulo
11
Figura 11.7.
Para descompactar o arquivo, vou usar o Assistente para extrao do prprio Win-
dows XP SP2. No entanto, voc pode usar o WinZIP ou WinRAR, como preferir.
Figura 11.8.
8. Clique em Avanar.
Figura 11.9.
Figura 11.11.
captulo
11
Figura 11.12.
Figura 11.13.
Figura 11.15.
Figura 11.17.
1. Crie uma nova aplicao, mas, desta vez, ao invs 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.
captulo
11
Figura 11.19.
Figura 11.20.
3. Na parte final da Toolbar, clique com o boto direito sobre a mesma selecio-
nando a opo Add Tab, como mostra a Figura 11.21:
Figura 11.21.
Figura 11.22.
5. Clique com o boto direito na guia que acabamos de criar e selecione a opo
Choose Items (Figura 11.23).
captulo
11
Figura 11.23.
Figura 11.24.
Figura 11.25.
8. Clique em Open.
captulo
11
Figura 11.27.
Figura 11.28.
Para usar o AJAX Control Toolkit voc precisa ter o controle ScriptManager na
pgina 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.
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
captulo
ao projeto na criao 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.
captulo
11
Figura 11.34.
Figura 11.35.
Se voc clicar em Cancelar nada vai acontecer. Mas, ao clicar em OK, a ao definida
no evento Click do Button1 executada, como mostra a Figura 11.36:
Figura 11.36.
Figura 11.37.
captulo
11
Figura 11.38.
Figura 11.39.
Figura 11.40.
captulo
11
Figura 11.42.
Figura 11.43.
No exemplo a seguir (Figura 11.44), a hora est sendo exibida no topo direito da
pgina. No importa o contedo da pgina ou a rolagem da mesma, a hora vai ficar
sempre na mesma posio.
Figura 11.45.
captulo
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.
captulo
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>
//cdigos JavaScript
</script>
<head>
<script type=text/javascript src=externo.js></script>
</head>
<head>
<script type=text/javascript>
//cdigos JavaScript
</script>
</head>
<body>
<script type=text/javascript>
//cdigos JavaScript
</script>
</body>
A tag <noscript>
Apndice A 217
<script type=text/javascript>
alert(Ol fulano.);
</script>
<noscript>
<p>Ol fulano.</p>
</noscript>
Comentrios em Javascript
<script type=text/javascript>
// Comentrio de uma linha.
<head>
<script type=text/javascript>
<!--
//cdigos JavaScript
//-->
</script>
</head>
Case Sensitive
Variveis
ou
nomeVariavel = valorVariavel;
Voc pode criar uma varivel com ou sem a declarao var, mas aconselhvel
utiliz-la.
Quando criamos uma varivel dentro de uma funo, a tornamos local, ou seja,
acessvel somente dentro da funo em que foi criada. J as variveis globais, so
declaradas fora das funes e ficam acessveis a toda e qualquer funo na pgina
em que a varivel esteja.
Apndice A 219
Operadores
Operadores aritmticos
Operadores de relacionais
Menor ou igual <= a <= b Se o valor de a for menor ou igual que o valor
de b, ento o resultado dessa expresso verdadeiro,
seno falso.
Operadores de atribuio
Operador condicional
Operador condicional aquele que atribui um valor a uma determinada vari-
vel com base em uma condio, ou seja, se a condio for verdadeira, teremos um
valor x, caso contrrio, um valor y.
Conhea a sintaxe desse tipo de condio:
Apndice A 221
condicional, ou seja, se o valor da varivel nota for maior ou igual a 60, teremos o
valor Aprovado, caso contrrio, teremos Reprovado.
Estruturas de controle
Como o prprio nome diz, as estruturas de controle servem para controlar a
execuo dos nossos programas. Elas so dividas em:
Estruturas de deciso
Declarao if
Sintaxe:
if (condio) {
//cdigo a ser executado quando a condio for verdadeira.
}
Exemplo:
Declarao if...else
Sintaxe:
if (condio) {
//cdigo a ser executado quando a condio for verdadeira.
} else {
//cdigo a ser executado quando a condio for falsa.
}
Exemplo:
if (condio) {
//cdigo a ser executado quando a condio for verdadeira.
} else if (2 condio) {
//cdigo a ser executado quando a 2 condio for verdadeira.
} else {
//cdigo a ser executado quando a primeira e a segunda condio
forem falsas.
}
Exemplo:
Apndice A 223
switch(expresso) {
case valor 1:
//cdigo a ser executado se a expresso = valor 1;
break
case valor 2:
//cdigo a ser executado se a expresso = valor 2;
break
default:
//cdigo a ser executado se a expresso for diferente do valor
1 e valor 2;
}
Exemplo:
Temos a varivel estado com o valor PR. Iniciamos nossa declarao condicional
com o switch, passando a ele como parmetro a expresso (varivel) estado.
Ento, utilizamos o case. Para isto, necessrio verificar o seguinte: se o valor
da varivel for PR, exibimos um texto; se for SP, exibimos outro, e assim por diante;
se o valor da varivel no coincidir com nenhum dos valores nos cases, exibimos um
texto padro (default).
Estruturas de Repetio
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 cdigo executado apndice
enquanto a condio for verdadeira. A
Loop do...while
Sintaxe:
Apndice A 225
do {
//cdigo a ser executado.
} while (var <= valorFinal);
Exemplo:
var numero = 1;
do {
alert(Nmero atual: + numero);
numero = numero + 1;
} while (numero < 1).
Break
O comando break interrompe a execuo 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:
Apndice A 227
Figura Ap. A.3.
No comando prompt voc pode sugerir uma resposta (Figura Ap. A.4). Exemplo:
Funes
function nomeDaFuncao() {
//cdigos referente funo.
}
Exemplo:
function HelloWorld() {
alert(Ol mundo.);
}
// Exemplo para cham-la.
<a href=# onclick=javascript:HelloWorld();>Chamar a Funo</a>
Exemplo:
function HelloWorld(nome) {
alert(Ol + nome);
}
// Exemplo para cham-la.
<a href=# onclick=javascript:HelloWorld(Moroni);>Chamar a
Funo</a>
Esta mensagem pode ser personalizada uma vez que o parmetro passado a ela
o nome de algum usurio.
Quando queremos que uma funo retorne algum valor, utilizamos a declarao
return, que tem o papel de especificar o valor retornado pela funo.
Exemplo:
function calculo(valor1,valor2) {
total = valor1 * valor2;
return total;
}
// Chamando a funo atravs do alert().
alert(calculo(23,5)); apndice
A
Apndice A 229
No exemplo anterior, chamamos a funo calculo fornecendo a ela dois par-
metros: valor1 (23) e valor2 (5). Nesta funo, temos a varivel total que multiplica
os dois parmetros informados e retorna o valor utilizando o return.
Eventos
onclick=javascript:nomeDaFuncao(parametroSeHouver);
onload e onunload
O evento onload executado quando uma pgina HTML carregada por com-
pleto, incluindo as imagens. J o evento onunload ocorre quando o usurio sai
de uma pgina. Eles so 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 tambm pode chamar uma funo para validar um formulrio,
assim como outros eventos.
onfocus, onblur e onchange
Esses trs eventos so utilizados na maioria das vezes em associao com algum
elemento de formulrio.
O evento onfocus ocorre quando o usurio 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 clssico para o evento onchange (ao trocar/mudar) quando
alteramos uma opo na lista de um combobox. Nesta ao, ocorre o onchange.
Exemplos:
onfocus=funcaoParaFocus(); onblur=funcaoParaBlur();
<select ... onchange=funcaoParaChange(); ...>
Exemplos:
apndice
onkeydown=funcaoParaKeyDown();
onkeypress=funcaoParaKeyPress(); A
... onkeyup=funcaoParaKeyUp(); ...
Apndice A 231
Arrays
Ambos os exemplos anteriores esto corretos. A diferena entre eles que o se-
gundo informa o tamanho (valor total) que o Array ter atravs do nmero inteiro
(integer) 11 (onze).
Agora, vamos conhecer duas formas para criarmos um Array.
Mtodo Descrio
join() Coloca todos os elementos de um Array em uma string e os separam por um
delimitador especificado.
Data
Apndice 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;
Mtodo Descrio
Date() Retorna a data e o horrio atual.
getDate() Retorna o dia do ms (1-31).
getDay() Retorna o dia da semana (0-6).
getMonth() Retorna o ms (0-11).
getFullYear() Retorna o ano com quatro dgitos.
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 diferena 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 trs nos dois casos (string literal texto1;
objeto string texto2) porque trs o total de caracteres contido em AJAX.
Mtodo Descrio
indexOf() Retorna a posio da primeira ocorrncia de um valor especificado em
uma string.
lastIndexOf() Retorna a posio da ltima ocorrncia de um valor especificado em uma
string.
match() Procura por um valor especfico em uma string. Se encontrado, ele (va-
lor) retornado, caso contrrio, retorna null.
replace() Substitue alguns caracteres por outros caracteres em uma string.
toLowerCase() Exibe os caracteres da string em minsculos.
toUpperCase() Exibe os caracteres da string em maisculos. apndice
Apndice A 235
Math
O objeto Math disponibiliza diversos valores e funes para nos ajudar na rea-
lizao de operaes matemticas. A seguir uma relao dos valores matemticos
que podem ser acessados pelo objeto Math.
floor()
Arredonda o valor informado para baixo at nmero inteiro mais prximo.
Exemplo:
max()
Retorna o nmero de maior valor entre dois nmeros especificados.
random()
Retorna um nmero entre 0 e 1.
alert(Math.random());
alert(Math.random()*59);
// Exibir nmeros aleatrios entre 0 e 59 - Exemplo:
58.92792655560298
round()
Arredonda o valor informado para o nmero inteiro mais prximo, seja positivo
ou negativo.
apndice
A
Apndice A 237
Apndice 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 {
apndice
background-color: #666666;
B
Apndice B 241
border: 1px solid #fc6c6c;
}
.nodestaque {
background-color: #ffffff;
border: 1px solid #000000;
}
Os mtodos 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;
}
Apndice B 243
A vantagem do mtodo className que podemos alterar as propriedades do
estilo na folha de estilo vinculada pgina, ou seja, no 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 mtodo innerHtml
Para alterarmos ou inserirmos contedo ou uma marcao HTML em um objeto,
utilizamos o mtodo innerHTML.
Imaginemos uma tag <div> em sua marcao HTML e que essa tag esteja com
o atributo ID definido como menu. Podemos utilizar o mtodo getElementById
para acess-la e o mtodo innerHTML para manipular seu contedo ou marcao
HTML.
Exemplo de como alterar o contedo de uma tag:
Os mtodos appendChild
e createElement
O mtodo 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 referncia ao atributo ID de uma tag e esta ser o pai do
novo elemento que ser adicionado. Em seguida, utilizamos o mtodo appendChild
informando a ele a tag que criamos na varivel novoElemento.
Para concluir, a tag hr foi adicionada como filho do elemento cujo atributo ID
igual a menu.
O mtodo createElement a soluo quando voc necessita criar um novo
elemento em sua marcao HTML, mas no h possibilidades de alterar a marcao
j existente e o novo elemento deve ser inserido mediante algum evento ocorrido na
pgina ou ocasionado pelo usurio.
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);
}
Apndice B 245
Definimos qual ser a nova tag a ser criada. Observe que essa informao
oriunda de um parmetro (nTag) da funo em questo:
Os mtodos insertBefore
e insertAfter
O mtodo insertBefore usado quando precisamos inserir algum elemento
em um local especfico e no como o mtodo 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(Ttulo));
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(Contedo do
novo elemento ...));
var referencia = document.getElementById(tit);
var parentTag = referencia.parentNode;
parentTag.insertBefore(novoElemento, referencia.nextSibling);
}
//-->
</script>
apndice
B
Apndice B 247
Os mtodos setAttribute
e getAttribute
O mtodo setAttribute tem a finalidade de inserir ou modificar um atributo
em um elemento existente. A sintaxe do mtodo 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(Contedo 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 instalao, como mostra a Figura Ap.C.1.
5. Em seguida, surgir uma tela solicitando sobre o que deseja instalar. Deixe
marcada a opo Microsoft SQL Server 2005 Express Edition x86 (Download Size:
55 MB) para instalar o mesmo. Eu aconselho a instalao da documentao tambm.
Para isto, selecione a opo Microsoft MSDN 2005 Express Edition (Download Size:
248 MB), como mostra a Figura Ap.C.3.
Apndice C 251
apndice
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
tambm o espao disponvel no disco. Clique em Install > para iniciar a instalao.
Apndice C 253
apndice
C