Skip Navigation Links
Novas Tecnologias
Ferramentas Adicionais
Ferramentas Adicionais
Referência a WebControls no Código JavaScript
Data:7/19/2008

Translate this page now :





Categories: ASP.NET

Gostou do texto ? Vote e dê sua opinião! Pontuação atual :
Adicione aos Favoritos!
BlogBlogs Rec6 Linkk Ueba Technorati Delicious DiggIt! StumbleUpon

Veja Também


Frequentemente precisamos utilizar no javascript o nome dos nossos webControls, porém nem sempre isso é uma tarefa fácil : Quando nossos webControls encontram-se dentro de containers, tal como quando usamos master pages, login view ou outros casos semelhantes, o id do webControl se altera no client.

Talvez vocês já tenham ouvido falar que os webControls possuem uma propriedade chamada clientid, que contém o nome que o controle irá realmente ter quando estiver no client, mas como inserir este clientID no meio de um trecho de javascript como esse :

   1: <script language="javascript"> 
   2: alert($get("aqui entra o nome do objeto").value); 
   3:  

A solução inicial pode parecer simples, veja :

   1: <script language="javascript"> 
   2: alert($get("<%# obternome() %>").value); 
   3:  

no code-behind criamos a função obternome :

   1: Protected Function obternome() As String 
   2:        Return (Button1.ClientID) 
   3: End Function 

ou em C# :

   1: public string obternome() {
   2:     return Button1.ClientID
   3: }

Mas ocorre um problema : Expressões utilizando o "#" apenas são processadas quando é solicitado um databind() no objeto dentro do qual elas encontram-se. Neste exemplo a expressão acima nunca seria processada.

Mas poderiamos resolver da seguinte forma :

   1: 
"divteste" runat="server">
   2: <script language="javascript"> 
   3: alert($get("<%# obternome() %>").value); 
   4:  
   5: 

E no codeBehind :

   1: Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
   2:        divteste.DataBind() 
   3: End Sub 

Ou C# :

   1: protected void Page_Load(object sender, EventArgs e)
   2: {
   3:     divTeste.DataBind();
   4: }

 

Desta forma forçamos o databind em uma "div" que na verdade não contém absolutamente nada além do javascript e geramos o nome client do nosso objeto naquela posição.
Uma dúvida comum : Por que não usar diretamente o page.databind() ? Simples : Porque além de ser muito mais pesado o page.databind() pode executar o vinculo de dados de algum objeto que não desejamos executar naquele momento, por isso o uso de page.databind não é aconselhavel.

Outra observação importante : como isso é para resolver problemas justamente causados por containers, esta dica http://www.bufaloinfo.com.br/dicas.asp?cod=810  sobre o findcontrol pode ser importante.



Categories: ASP.NET


Nome :
E-mail:
Comentarios :
 
 
Os Últimos Comentários
Nenhum comentário foi realizado ainda. Seja o primeiro !
Dicas
Dica do Dia
Receba Dicas Por Email
E-mail :  
 


 (help)
Aceito receber informativos do devASPNet, informações de eventos e treinamentos

Veja Quais Informativos Você Receberá

Pesquisar Dicas
Pesquisar Artigos, Dicas e Noticias

Banco de Dados
Algumas Entrevistas
Links Importantes

Búfalo Informática, Treinamento e Consultoria
R. Alvaro Alvim, 37/920 Centro - Cinelândia - Rio de Janeiro Cep: 20031-010
Tel : (21) 2262-1368 (21) 9240-5134 E-mail : Contato@bufaloinfo.com.br