- Entrou
- Set 23, 2006
- Mensagens
- 15
- Gostos Recebidos
- 0
Noticias ASP.NET : Referência a WebControls no Código JavaScript
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 :
<script language="javascript">
alert($get("aqui entra o nome do objeto").value); </script>
A solução inicial pode parecer simples, veja :
<script language="javascript">
alert($get("<%# obternome() %>").value); </script>
no code-behind criamos a função obternome :
Protected Function obternome() As String Return (Button1.ClientID) End Function
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 :
<div id="divteste" runat="server">
<script language="javascript">
alert($get("<%# obternome() %>").value); </script> </div>
E no codeBehind :
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
divteste.DataBind()
End Sub
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 objecto naquela posição.
Uma dúvida comum : Por que não usar directamente o page.databind() ? Simples : Porque além de ser muito mais pesado o page.databind() pode executar o vinculo de dados de algum objecto que não desejamos executar naquele momento, por isso o uso de page.databind não é aconselhável.
alucarD
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 :
<script language="javascript">
alert($get("aqui entra o nome do objeto").value); </script>
A solução inicial pode parecer simples, veja :
<script language="javascript">
alert($get("<%# obternome() %>").value); </script>
no code-behind criamos a função obternome :
Protected Function obternome() As String Return (Button1.ClientID) End Function
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 :
<div id="divteste" runat="server">
<script language="javascript">
alert($get("<%# obternome() %>").value); </script> </div>
E no codeBehind :
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
divteste.DataBind()
End Sub
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 objecto naquela posição.
Uma dúvida comum : Por que não usar directamente o page.databind() ? Simples : Porque além de ser muito mais pesado o page.databind() pode executar o vinculo de dados de algum objecto que não desejamos executar naquele momento, por isso o uso de page.databind não é aconselhável.
alucarD