Der folgende Code funktioniert nicht. Das Markup befindet sich in einem Benutzersteuerelement, und deshalb gibt ClientID das falsche Präfix für die TextBox-ID zurück.ASP.Net: ClientID in Code-Behind eines Benutzersteuerelements nicht korrigiert
Markup:
<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">
-Code-Behind:
btnFind.Attributes.Add("onClick",string.Format("DoctorLink
('{0}',document.getElementById('{1}').value,{2});",
row["ZipCode"],
txtName.ClientID));
Ergebnisse in Browser:
<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);" />
Wie Sie sehen können, ist der Parameter für den Aufruf JavaScript ist DoctorsMainArea1_ctl00_txtName
, aber Die tatsächliche ID des Eingabeelements ist DoctorsMainArea1_ctl01_txtName
.
Irgendeine Idee, wie man das repariert? jQuery? Ich interessiere mich nicht so sehr für eine Erklärung dessen, was vor sich geht (vielleicht gibt es eine andere Kontrolle auf dieser Seite, die sich einmischt), aber eine robustere Art, das Problem zu lösen.
Warum müssen Sie document.getElementById verwenden, wenn es das Ereignis onclick für dasselbe Steuerelement ist, das Sie abrufen möchten? Kannst du nicht einfach "this" verwenden (was das Eingabefeld zurückgibt. Dann musst du nicht einmal versuchen, die ID auszuarbeiten, und du brauchst runat = "server" nicht. – RPM1984
Der Onclick-Handler für die Schaltfläche wird serverseitig zusammengefügt, da ich die Postleitzahl und andere Parameter brauche, die ich entfernt habe, um den Code leichter lesbar zu machen. – cdonner
Ändern Sie den Kontrollbaum nach dem Lesen von ClientID? – sisve