Desenvolvimento - Javascript

ASP.NET – Veja como manipular JScript e obter algumas facilidades com a classe Page

Neste artigo vou mostrar algumas facilidades do ASP.NET para manipular script. Vou explicar como algumas funções da classe Page que podem resolver esses probleminhas.

por Renato Guimarães



Sabemos que é normal em toda aplicação web utilizarmos JScript por todo lado. Assim que eu comecei trabalhar com .NET fiquei um pouco enrolado na hora de gerar alguns blocos de scripts dinâmicamente. A primeira coisa que veio à minha cabeça foi usar o Response.Write. Vi que não era uma forma legal e eu tinha certeza que existia algum mecanismo para facilitar esse trabalho. Por exemplo, quando o usuário selecionasse alguma informação deveria ser gerado algum campo hidden; outro exemplo seria exibir um caixa (windows.alert) ao usuário após um postback. Outra necessidade que eu tive foi gerar um postback num html control. Eu queria gerar um postback num evento diferente dos que são mostrados na paleta de propriedades Visual Studio.NET. Por exemplo, eu queria registrar uma função no onclick de um button para ser executado na aplicação cliente antes do submit.

No artigo de hoje vou mostrar algumas facilidades do ASP.NET para manipular script. Vou explicar como algumas funções da classe Page podem resolver esses probleminhas. Vamos aprender?

  • Como registrar um bloco de script dinâmicamente;

  • Como utilizar funções do ASP.NET para criar campos hidden, arrays etc;

  • Como gerar um postback em qualquer evento de qualquer objeto HTML e como registrar algum atributo de um Server Control dinâmicamente. Por exemplo, gerar um script no evento onmouseover e onmouseout de um button. Ou como registrar um onclick de um Button para ser executado no cliente antes do submit.

Para construir os exemplos estarei usando o WebMatrix (http://www.asp.net/webmatrix). Espero nos próximos dias usar a versão do Alpha VS.NET 2004 (Whidbey) que instalei na minha máquina.

Como registrar um bloco de script dinamicamente?

O exemplo abaixo mostra como você pode recuperar uma informação digitada pelo usuário e, em seguida, registrar um scpript com esse valor digitado. Lógico que poderíamos fazer isso que o exemplo faz sem precisar registrar o script. A idéia é mostrar como você poderá gerar um script com os dados digitados pelo usuário ou devido a alguma ação.

Exemplo 1 - Registrando um bloco Jscript dinamicamente usando o método RegisterClientScriptBloc da classe Page

Exemplo 2 – Registrando um bloco Jscript dinamicamente usando o método RegisterOnSubmitStatement da classe Page.

Esse método permite uma página acessar o evento OnSubmit. O script que será chamado deve ser uma função registrada em qualquer lugar da página. Essa função pode ser digitada direto no HTML ou pode ser gerada dinâmicamente com o método RegisterClientScriptBlock.

Exemplo 3 – Registrando um bloco Jscript dinâmicamente usando o método RegisterStartupScript da classe Page.

Similar ao método RegisterClientScriptBlock, este método registra o script antes da tag de fechamento do objeto Page – o elemento <form runat= server>. O script é registrado assim que a tag form for gerada. Sendo assim, você deve gerar seu script entre os elementos <script> </script>. Através da identificação do script, múltiplos server controls podem requisitar o bloco de script sem que ele precise ser gerado duas vezes. Clique com o botão direito no HTML e escolha a opção para ver o código fonte para verificar que o bloco de script foi registrado após a tag <form runat="server">.

Como utilizar funções do ASP.NET para criar campos hidden, arrays etc?

Quem nunca precisou gerar um campo hidden para manter alguma informação? Apesar de Web Form ter um excelente recurso que é o ViewState, em alguns momentos, você ainda sentirá a necessidade de utilizar campos hidden para manter informações do usuário. Eu acho melhor guardar pequenas informações (evite colocar dentro destes campos dados confidenciais sem criptografá-los) em campos hidden porque não é preciso a página ficar mantendo aquele campo hidden __VIEWSTATE enorme dentro da página. Em alguns momentos eu só quero guardar apenas um código que não ocupa nada mais que 2 caracteres. Sendo assim, eu prefiro usar campos hiddens a usar o ViewState. Quando se trata de alguma informação que precise de um pouco mais de segurança eu acho melhor trabalhar com o ViewState.

Imagine então uma aplicação onde o usuário fez uma pesquisa que retornou vários registros. O resultado dessa pesquisa é exibido num DataGrid onde cada linha tem um CheckBox para selecionar o item. Após ter selecionado os registros, o usuário começa a selecionar registros e fazer paginação do resultado. Para essa situação eu usei um função que lia os registros selecionados pelo usuário e, em seguida, registrava num campo hidden. Cada valor dentro do campo era separado por um ":". Ao final, quando dava um clique em Salvar, eu recuperava os valores selecionados que estavam dentro do hidden usando Request["nomeCampoHidden"] e guardava numa variável do tipo String. Para separar cada valor, chamava o método Split da classe String.

Nesse exemplo, o usuário digita um valor dentro do campo hidden e, ao clicar no botão Enviar Valor, será registrado um campo hidden.

Exemplo 4 – Registrando um campo hidden dinamicamente usando o método RegisterHiddenField da classe Page.

O método RegisterArrayDeclaration é bem semelhante aos outros comentados até agora. Registra a declaração de um Array EMCAScript quando a página for renderizada. Após a página ter sido renderizada, você pode utilizar uma função Jscript para navegar por todos os elementos do array.

Exemplo 5 – Registrando uma declaração de um array no padrão ECMAScript.

Como registrar eventos e atributos para um server control que não suportados pelo VS.NET diretamente? Como registrar um PostBack para um evento qualquer?

Outro dia precisei registrar uma função de formatação para um TextBox. Na renderiação de um TextBox é gerado um <input type="text">. Esse controle possui vários eventos, como por exemplo, onmouseover, onmouseout, onkeypress. Utilizando o VS.NET você não consegue defenir esses eventos diretamente. Sendo assim, como seria possível registrar eventos e atributos que não são suportados pela caixa de propriedades do VS.NET. Outra situação interessante é você precisar executar um postback num controle que não seja um Server Control. Outro O exemplo abaixo mostra como você poderia registrar qualquer evento ou atributo para um web control e como gerar um postback.

Exemplo 6 – Registrando um atributo ou evento qualquer para um Server control e emitindo um postback através de um link

Bem, espero ter mostrado a vocês que, mesmo com um modelo baseado em componentes, o ASP.NET nos dá possibilidades de manipular código Jscript numa boa através de alguns métodos da classe Page. Sabemos o quanto é importante a utilização de script nas páginas web e vale a pena explorar esses recursos.

Mais uma vez, obrigado a todos pela atenção e até o próximo...

Renato Guimarães

Renato Guimarães - Bacharel em Sistemas de Informação e trabalha com tecnologia da informação há mais de 15 anos.