Momento POG: Submetendo Textboxes Readonly alterados via JavaScript
Leonel Fraga de Oliveira 10/06/2009 00:00

Em vários momentos precisamos inibir a edição de algumas caixas de texto pelo usuário, seja que ela sirva somente para apresentação de um valor que vem diretamente da base de dados ou que apresente o resultado de uma pesquisa iniciada em outra página.

Para que o segundo motivo seja possível de ser feito, é necessário que uma rotina JavaScript altere o valor desta caixa de texto. Imagine o seguinte cenário:

- Página principal tem um campo onde se precisa informar dados de um veículo previamente cadastrado no sistema, sendo este campo bloqueado para edição manual e há um botão de pesquisa que abre uma janela pop up.

- Página pop up onde é feita uma pesquisa por um registro; clicando-se neste registro o campo da janela principal é alterado.

Se tratando de código, é algo mais ou menos assim:

Página Principal:

<asp:TextBox runat="server" id="tbxDadosVeiculo" ReadOnly="True"></asp:TextBox>

Página Pop Up, aberta pela página Principal:

 protected void SelecionaRegistro_Click(object sender, EventArgs e)
 {
     string script = "window.opener.getElementById("tbxDadosVeiculo").value = " + "'" + getDadosVeiculo(...) + "'";
     ClientScript.RegisterStartupScript(this.GetType(),"populaprincipal",script);
 }

O código do pop up é simples. Ele apenas registra uma rotina JavaScript, fazendo com que um textbox da página principal seja alterado.

Porém, ao submeter o formulário da página principal, o valor colocado pelo JavaScript na janela pop up ou outro script da mesma página no textbox é perdido.

Isto acontece por causa de uma política de segurança do .NET Framework 2.0, em que valores de componentes de interface com o atributo somente leitura no servidor não sejam postados, perdendo-se nesta operação.

Mas, graças também ao JavaScript e a POG a seguir podemos fazer com que a caixa de texto fique somente-leitura, porém poste seu conteúdo para o servidor. Siga os passos:

  1. Deixe o atributo ReadOnly da tag de servidor em False.
  2. Registre o atributo readOnly na tag HTML do cliente, com o seguinte código no evento PageLoad do formulário web:
tbxDadosVeiculo.Attributes.Add("readOnly","true");

onde tbxDadosVeiculo é o textbox que será alterado via JavaScript.

Isto fará com que o servidor não tome conhecimento de que esta caixa de texto é somente leitura, dê um “bypass” na política de segurança e o conteúdo do textbox permaneça após os postbacks.

Um abraço!

Leonel Fraga de Oliveira Leonel Fraga de Oliveira é formado em Processamento de Dados na Faculdade de Tecnologia de São Paulo (FATEC-SP - 2002) e anteriormente em Técnico em Eletrônica, pela ETE Professor Aprígio Gonzaga (lá em 1999).
Atualmente trabalha como Analista de Sistemas na Prefeitura Municipal de São Caetano do Sul - SP
Tem como hobbies DJing (também trabalha como DJ freelancer) e ciclismo, além da manutenção dos sites NeoMatrix Light e NeoMatrix Tech.
Gosta de música eletrônica, tecnologia, cinema (super fã de Jornada nas Estrelas), gastronomia e outras coisas mais.


Compartilhe nas redes sociais

   

Deixe seu comentário

comments powered by Disqus