Embutindo JavaScript em Páginas ASP.NET
JavaScript - Visão
Geral
JavaScript, desenvolvido por
Netscape Communications e Sun Microsystems, é uma linguagem de programação que
podemos usar para adicionar efeitos dinâmicos a nossa página da web. HTML
(Hypertext Markup Language) pode somente descrever o modo como os elementos das
páginas web (text, forms, hyperlinks, tabelas, e etc [...]) são visualizados -
eles não tem uma maneira de ordenar seus comportamentos. A capacidade de inserir
scripts de JavaScript em páginas web nos fornece mais controle sobre como as
páginas web se comportam.
Linguagens de
script semelhantes ao JavaScript proporcionam a web maior poder de processamento
e interatividade com o usuário. A utilização do JavaScript é comum em validações
de formulário, processo de verificação de todas as informações requeridas e seus
formatos - exemplo do formato de data (dd/mm/aaaa).
É importante ressaltar que a interpretação do
código ocorre no lado cliente e após a página ter sido completamente baixada do
servidor. Isso tem suas vantagens e desvantagens. Uma vantagem é que o
JavaScript executa mais rápido que outras linguagens que comunicam direto com o
servidor, porém é incapaz de acessar recursos localizados no servidor de que ele
origina.
Por tudo, JavaScript não é
compilado e independente, o que significa que ele tem que estar embutido em uma
página web e ser executado em uma janela de navegador, pois é o navegador que
faz interpretação do código JavaScript.
Embutindo Script em uma Página ASP.NET
Devido a importância dos scripts executados no
lado cliente para o ASP.NET, não devemos ficar supresos ao ver a dedicação da
Framework .NET implementar propriedades que nos permite gerar scripts no cliente
a partir do servidor. O ASP.NET usa a nova propriedade "Page.ClientScript" para
registrar e colocar as funções JavaScript na página.
Embutindo Blocos de
Código no Topo
O método RegisterClientScriptBlock nos permite
colocar funções JavaScript personalizadas no topo página - imediatamente após a
tag <form>. As construções possíveis com este são:
- RegisterClientScriptBlock (type, key,
script);
- RegisterClientScriptBlock (type, key, script,
addScriptTags);
Onde:
- type - o tipo de cliente script para
registrar. Neste caso, o tipo é a própria página;
- key - palavra chave que permite
traçar as funções programaticamente;
- script - conteúdo de rotina do
JavaScript;
- addScriptTags - valor booleano que
indica se o ASP.NET deve incluir as tags <script> e </script> e
inserir o conteúdo de rotina dentro destas.
Veja na prática:
'vb
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Dim myScript As String = "function AlertHello() { alert('Hello ASP.NET'); }"
Page.ClientScript.RegisterClientScriptBlock(Me.GetType(), "MyScript", myScript, _
True)
End Sub
//c#
protected void Page_Load(object sender, EventArgs e) {
string myScript = @"function AlertHello() { alert('Hello ASP.NET'); }";
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "MyScript", myScript,
true);
}
<!-- Resultado HTML -->
<form>
<script type="text/javascript">
<!--
function AlertHello() { alert('Hello ASP.NET'); }// -->
</script>
<!-- [conteúdo] -->
</form>
Listagem 01 - Exemplo de como
utilizar o método RegisterClientScriptBlock
No exemplo da Listagem 01 nos especificamos o
tipo como (vb) Me.GetType() e this.GetType() (c#), a chave "MyScript", o script
para inclusão "function AlertHello(){ [...] }" e um valor "true", que permite
colocar o script automaticamente dentro das tags <script>.
Quando temos um pouco de JavaScript que está
trabalhando com algum controle em nossa página, e demais casos, devemos utilizar
o método RegisterStartupScript em lugar de RegisterClientBlock. Por exemplo, nós
usamos o seguinte código para criar uma página que inclui um simples controle
<asp:TextBox> que contém um valor "Hello ASP.NET" (Listagem
02).
<asp:TextBox
ID="TextBox1" Runat="server">Hello ASP.NET</asp:TextBox>
Listagem 02 - Exemplo de controle
TextBox
Utilize o método
RegisterClientScriptBlock para embutir um script na página que acessa o valor do
controle "TextBox1", ilustrado na Listagem 03.
'vb
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Dim myScript As String = "alert(document.forms[0]['TextBox1'].value);"
Page.ClientScript.RegisterClientScriptBlock(Me.GetType(), "myKey", myScript, _
True)
End Sub
//c#
protected void Page_Load(object sender, EventArgs e) {
string myScript = @"alert(document.forms[0]['TextBox1'].value);";
Page.ClientScript.RegisterClientScriptBlock(this.GetType(),
"MyScript", myScript, true);
}
Listagem 03 - Exemplo de como acessar
o controle "TextBox1" com o método RegisterClientScriptBlock
Ao rodar esta página será gerado um erro de
JavaScript (Figura 01).

Figura 01 - Erro gerado
pela utilização do método RegisterClientScriptBlock
A razão deste erro é que a função JavaScript
dispara antes das tags serem recebidas pelo navegador. Portanto, a função
JavaScript não encontra "TextBox1" e causa erro.
Por fim, a diferença do método
RegisterStartupScript é que ele insere a função JavaScript após todas as tags
serem recebidas pelo navegador.
Embutindo Campos Ocultos
Desenvolvedores frequentemente armazenam
pequenas quantidades de informações na página, ocultas de um usuário. Se o
conteúdo é dinâmico, semelhante a uma variável, o formulário trabalhará com um
armazenamento local. O método RegisterHiddenField() é responsável por esse
procedimento. A construção possível com este método é:
- Page.ClientScript.RegisterHiddenField(hiddenFieldName,
hiddenFieldInitialValue);
Onde:
- hiddenFieldName - representa o nome
do Hidden, ou melhor, o identificador do controle;
- hiddenFieldInitialValue - valor
inicial do controle;
Veja na
prática:
'vb
Page.ClientScript.RegisterHiddenField("submittime", "")
//c#
Page.ClientScript.RegisterHiddenField("submittime", "");
<!-- Resultado HTML
-->
<input type="hidden"
name="submittime" id="submittime" value="" />
Listagem 02 - Exemplo de como
utilizar o método RegisterHiddenField
Para manipular este campo utilize
"document.forms[0].submittime.value = 'submit';".
Uma das desvantagens é que o controle Hidden
permite alteração de conteúdo via navegador, o que pode tornar a aplicação
vulnerável.
Embutindo Blocos de Código na Base
O método RegisterStartupScript não é muito
diferente do método RegisterClientScriptBlock. A grande diferença é que o
RegisterStartupScript coloca o script na base da página - depois que o navegador
receber todas as tags e antes da tag </form>. As construções possíveis com
este são:
- RegisterStartupScript (type, key,
script);
- RegisterStartupScript (type, key, script,
addScriptTags);
Estes
parâmetros seguem a mesma especificação do método
RegisterClientScriptBlock.
Veja na
prática:
'vb
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Dim myScript As String = "function AlertHello() { alert('Hello ASP.NET'); }"
Page.ClientScript.RegisterStartupScript(Me.GetType(), "myKey", myScript, _
True)
End Sub
//c#
protected void Page_Load(object sender, EventArgs e) {
string myScript = @"function AlertHello() { alert('Hello ASP.NET'); }";
Page.ClientScript.RegisterStartupScript(this.GetType(),
"MyScript", myScript, true);
}
<!-- Resultado HTML -->
<form>
<!-- [conteúdo] -->
<script type="text/javascript">
<!--
function AlertHello() { alert('Hello ASP.NET'); }// -->
</script>
</form>
Listagem 03 - Exemplo de como
utilizar o método RegisterStartupScript
Embutindo Referência a um Arquivo ".js"
Muitos desenvolvedores colocam o código
JavaScript dentro de um arquivo .js. Considerado uma boa prática, um .js é um
arquivo global que permite modificar facilmente o código, persistindo em toda
aplicação. Podemos registrar arquivo de script em nossa página através do método
RegisterClientScriptInclude. As construções possíveis com este são:
- RegisterClientScriptInclude (key,
url);
- RegisterClientScriptInclude (type, key,
url);
Onde:
- type - o tipo de cliente script para
registrar. Neste caso, o tipo é a própria página;
- key - palavra chave que permite
traçar as funções programaticamente;
- url
- caminho do arquivo;
Veja na prática:
'vb
Dim myScript As String = "myJavaScriptCode.js"
Page.ClientScript.RegisterClientScriptInclude("myKey", myScript)
//c#
string myScript = "myJavaScriptCode.js"
Page.ClientScript.RegisterClientScriptInclude("myKey", myScript);
<!-- Resultado HTML -->
<script src="myJavaScriptCode.js" type="text/javascript"></script>
Listagem 03 - Exemplo de como
utilizar o método RegisterClientScriptInclude
Embutindo Atributo Específico em um Controle
O método RegisterExpandoAttribute
registra um par de nome/valor como um atributo personalizado de um controle
específico.
Confira: ClientScriptManager..::.RegisterExpandoAttribute
Embutindo
Recursos
O método
RegisterClientScriptResource registra recurso de script de cliente como objeto
Page usando o tipo e o nome do recurso.
Confira: ClientScriptManager..::.RegisterClientScriptResource
Adicionando JavaScript
a Controles de Servidor
Podemos
adicionar efeitos no ASP.NET adicionando JavaScript inline no atributo. Para
permitir um evento JavaScript para um objeto HTML, adicione o evento como um
atributo do objeto HTML e informe qual a ação que será executada quando o evento
for disparado.
Eventos Inline
<asp:Button ID="Button1" runat="server"
Text="Button" OnClientClick="alert('Hello ASP.NET')" />
<asp:Image ID="Image1" runat="server"
OnMouseOver="alert('Hello ASP.NET')" />
Eventos Adicionados Dinamicamente
Image1.Attributes.Add("OnMouseOver", "alert('Hello ASP.NET')")
Button1.Attributes.Add("OnClick",
"alert('Hello ASP.NET')")
Registrar Identificador dos Controles no
Código JavaScript
Dim myScript As String =
"<script>document.all." & TextBox1.ClientID &
".focus()</script>"
Page.ClientScript.RegisterStartupScript(Me.GetType(), "myKey", myScript, True)
OU
<!-- [...] -->
document.all.<%# Textbox1.ClientID
%>.focus();
<!-- [...] -->
Referências
- Professional ASP.NET 2.0 Published by Wiley
Publishing, Inc.;
- ASP.NET 2.0
All-in-One Desk Reference For Dummies® Published by Wiley Publishing, Inc.;
- ASP.NET Cookbook, 2nd Edition By
Michael A. Kittel, Geoffrey T. LeBlond ;
- ASP.NET Solutions—23 Case Studies: Best
Practices for Developers By Rick Leinecker ;
- JavaScript Professional Projects by Paul
Hatcher and John Gosney ;
- JavaScript™
by Example By Ellie Quigley ;
Estou disponível para qualquer dúvida ou
sugestão (kallebe.santos@gmail.com).
Um grande abraço e até a próxima...