El siguiente código no funciona. El marcado está en un Control de usuario y supongo que es por eso que ClientID devuelve el prefijo incorrecto para el ID de TextBox.ASP.Net: ClientID no es correcto en el código subyacente de un control de usuario
de marcado:
<INPUT id="txtName" runat="server" maxlength="50" style="WIDTH:100px">
<INPUT type="button" value="Find Your Doctor" id="btnFind" runat="server"
style="MARGIN-LEFT:10px;WIDTH:130px">
de código subyacente:
btnFind.Attributes.Add("onClick",string.Format("DoctorLink
('{0}',document.getElementById('{1}').value,{2});",
row["ZipCode"],
txtName.ClientID));
Resultados en el navegador:
<input name="DoctorsMainArea1$ctl01$txtName" type="text"
id="DoctorsMainArea1_ctl01_txtName" maxlength="50" style="WIDTH:100px" />
<input name="DoctorsMainArea1$ctl01$btnFind" type="button"
id="DoctorsMainArea1_ctl01_btnFind" value="Find Your Doctor" style="MARGIN-
LEFT:10px;WIDTH:130px" onClick="PrepareDoctorLink('90210',
document.getElementById('DoctorsMainArea1_ctl00_txtName').value);" />
Como se puede ver, el parámetro de la llamada JavaScript es DoctorsMainArea1_ctl00_txtName
, pero la identificación real del elemento de entrada es DoctorsMainArea1_ctl01_txtName
.
¿Alguna idea de cómo solucionar esto? jQuery? No estoy tan interesado en una explicación de lo que está sucediendo (quizás haya otro control en esta página que interfiera), sino una forma más sólida de resolver el problema.
¿Por qué necesita usar document.getElementById cuando es el evento onclick para el mismo control que está tratando de recuperar? ¿No puede simplemente usar "esto" (que devolverá el cuadro de entrada. Entonces ni siquiera tendrá que probar y resolver el id, y no necesitará runat = "servidor"). – RPM1984
El controlador onclick para el botón se coloca junto al servidor porque necesito el código postal y otros parámetros que quité para que el código sea más fácil de leer. – cdonner
¿Está cambiando el árbol de control _después_ leyendo ClientID? – sisve