c# - ASP.Net: ClientID no es correcto en el código subyacente de un control de usuario
user-controls (4)
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.
Margen:
<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">
Código detrás:
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 puede ver, el parámetro para la llamada de JavaScript es DoctorsMainArea1_ctl00_txtName
, pero la identificación real del elemento de entrada es DoctorsMainArea1_ctl01_txtName
.
¿Algúna idea de cómo arreglar 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.
Debería intentar mover el código que agrega el atributo onclick al botón en el evento PreRender (o anulación OnPreRender) en su página o control de usuario. Eso probablemente debería hacer que ClientID sea correcto.
No sé qué versión de asp.net está utilizando pero en 4.0 puede declarar dentro de cualquier control de servidor ClientIDMode = "static" y le dará la identificación exacta en el navegador.
Ejemplo:
<asp:Textbox id="txtName" runat="server" ClientIdMode="static"/>
Otros son predecibles, heredan y se pueden usar con ClientIdRowsuffix. Se pueden usar a nivel de página e incluso en páginas maestras e incluso en el archivo web.config.
Ejemplo en el archivo web.config:
<system.web>
<Pages clientIDMode="predictable"/>
other system web properties
</system.web>
Viste el video del zapatero Craig en tekpub, también puedes leer más sobre él en el texto del enlace del blog de Rick. Es muy bueno, aunque
Una solución rápida:
btnFind.Attributes.Add("onClick",string.Format("DoctorLink
(''{0}'',document.getElementById(''{1}'').value,{2});",
row["ZipCode"],
"DoctorsMainArea1_ctl01_" + txtName.ClientID));
Esto sucede porque tienes un marcador de posición de contenido en tu página en alguna parte.
otra solución: etiqueta html:
<input type="text" name="txtName" id="txtName" />
code-bind:
string txtName_value = Request.Forms["txtName"];
y puedes obtener el valor
solo usa el control html.