2009-03-09 9 views
0

Cette question est similaire à Forcing client ids in ASP.NET mais pas tout à fait.Détermination des ID client ASP.NET

ASP.NET génère clientids selon son propre mécanisme interne. Je voudrais exécuter une requête xmlhttprequest en arrière-plan pour faire une mise à jour et recharger de manière sélective certains des contrôles. Mon plan est d'exécuter la requête et de régénérer la page en arrière-plan, mais uniquement de rendre sélectivement les contrôles que je veux mettre à jour - alors il suffit de remplacer le html de ces contrôles par les nouveaux. Ma question est: est-ce que je peux m'attendre à ce que les clientids soient les mêmes (puisque je génère la même page) et y a-t-il autre chose que je dois savoir si je veux mettre à jour html asp.net? par javascript?

Répondre

1

ASP.NET génère des noms de commande et l'ID de fonction de la position de la commande dans la hiérarchie de page.

Si cette hiérarchie ne va pas changer entre les régénérations page successives, alors vous pouvez être sûr que l'ID de commande généré ne sera pas différent. Un autre point notable est que les ID de contrôle ont des noms aléatoires sur chaque requête lorsque vous utilisez la mise en cache des fragments.

Une autre idée serait de stocker les ClientIDs (côté serveur disponible) dans le champ caché (s), puis récupérer ces informations via le script.

1

Alors que le système est prévisible, il est mal avisé de construire une dépendance à l'égard de ces noms car ils sont générés et il a la capacité de créer à la fois une charge d'entretien difficile et la possibilité de quelques bugs subtils lorsque vos pages font changer, qu'ils. Cela fait partie du problème de travailler avec asp.net en général, je vous suggère de trouver un moyen plus fiable de cibler les nœuds, comme le ciblage de nœuds wrapper non-asp et ensuite en regardant les enfants, ou en ciblant les noms de classe.

1

J'utilise l'astuce suivante pour obtenir le ClientID d'un contrôle ASP.NET:

<script type="text/javascript"> 
//textBox will contain the DOM element rendered for the <asp:TextBox /> control 
var textBox = document.getElementById("<%= nameTextBox.ClientID %>"); 
</script> 
<asp:TextBox runat="server" ID="TextBox1" /> 
Questions connexes