Le code HTML généré pour mon contrôle serveur ASP.net personnalisé génère l'attribut name pour les contrôles enfants, au lieu de l'attribut id. Quelque chose comme ceci:Attribut HTML 'name' généré pour les contrôles enfants ASP.net, au lieu de l'attribut unique 'ID'
<span id="GridView2_ctl02_editdis">
<input type="text" name="GridView2$ctl02$editdis$ctl00"/>
</span>
L'ID pour le contrôle personnalisé lui-même est apparemment correct.
Ce qui est encore plus étrange pour moi, c'est que l'ID est généré parfois (je ne sais pas dans quelles conditions). Mais un FindControl()
avec cet ID renvoie null du côté serveur. FindControl()
avec la valeur de l'attribut name fonctionne très bien.
Quelque chose comme ceci:
<span class="TextBox" id="GridView2_ctl02_editdis">
<input type="text" id="GridView2_ctl02_editdis_ctl00" name="GridView2$ctl02$editdis$ctl00"/>
</span>
Pour ce qui précède, FindControl("GridView2$ctl02$editdis$ctl00")
fonctionne très bien, FindControl("GridView2_ctl02_editdis_ctl00")
ne fonctionne pas.
Comment puis-je garantir des ID cohérents et prévisibles?
Hmm. J'utilisais l'ID html (de REQUEST ["__ LASTFOCUS"]) pour restaurer le focus sur le bon contrôle de la page ASP.net. Je réalise maintenant qu'il n'y a pas de traduction aussi simple d'un identifiant à l'autre. Le remplacement de '_' par '$' sera-t-il portable sur les versions .net? – sandesh247
Si je ne me trompe pas, toutes les versions .NET utilisent "_" pour les identifiants HTML et "$" pour les noms HTML et les ID en interne. – Ruslan