2009-04-07 8 views
3

Je rencontre un problème avec la propriété ID de UserControls chargé dynamiquement pendant le cycle de vie de la page. Plus spécifiquement, la propriété ID change lorsque le système appelle Page.Form.RenderControl (htmlTextWriter); Avant d'être appelé, le contrôle a l'ID "ctl84", mais après l'appel il a l'ID "ctl99".Problème de génération d'ID ASP.NET Dynamic UserControl

La sortie de HtmlTextWriter contient l'ID d'origine, mais l'inspection de la propriété ID du contrôle dans le débogueur VS 2008 révèle qu'il a changé.

L'application est en cours d'exécution dans un cadre MCMS 2002 (Microsoft CMS 2002) en utilisant .NET 2.0, 1.1 et converti à partir xhtmlConformance = "Legacy" est pas activé.

J'ai besoin que l'ID soit constant tout au long du cycle de vie de la page. Editer: La définition manuelle de la propriété ID n'est pas une option.

Répondre

1

Attribuez-vous explicitement un ID au contrôle à partir du code?

Si vous êtes l'ID devrait rester le même.

Il n'explique pas pourquoi il change cependant - je suppose que ... n'est pas le même contrôle. Les chances sont pour une raison que vous contrôlez la routine de génération est en cours d'exécution deux fois ou smt comme ça.

Mettez un point d'arrêt où le contrôle est genretated et voir si elle est frappé deux fois - Si oui, là vous allez, c'est votre problème.

+0

Je ne donner aucune pièce d'identité pour le contrôle, Je laisse intentionnellement à ASP.NET le soin d'attribuer des ID. – jamaicahest

+0

Y at-il une raison pour laquelle vous faites cela? Mettez un point d'arrêt où le contrôle est généré et voyez s'il est frappé deux fois - Si c'est votre problème – JohnIdol

+0

Oui, c'est parce qu'ils sont chargés à partir du système MCMS, où vous pouvez ajouter un tas de contrôles à une page virtuelle par un éditeur et Laissez le système comprendre comment le rendre. – jamaicahest

0

pour être sûr qu'il est la même instance du contrôle et pas un autre, vérifiez la méthode GetHashCode() du contrôle.

+0

GetHashCode() renvoie le même nombre avant et après Page.Form.RenderControl() – jamaicahest

0

Lorsque vous incluez un contrôle asp.net, l'ID généré change au moment de l'exécution. Vous ne pouvez pas prédire l'identifiant client exact généré. Ce que vous pouvez faire est d'utiliser la propriété ClienID fournie par le contrôle utilisateur.

Bouton btnSave = new Bouton();

btnSave.ID = "btnSave";

string clientID = btnSave.ClientID;

Si vous vérifiez cientID ce sera quelque chose comme "ctl88_99 _ *** _ btnSave".

+0

Le ClientID change également, le problème est que l'ID change le cycle de vie _during_ Page. Pas sur une publication ou un rechargement de page. – jamaicahest

+0

postback fait partie de la page cycle de vie – JohnIdol

+0

je suis d'accord clientID change. L'utilisation de l'ID client est utilisée pour effectuer des opérations qu'un ID client codé en dur. Je suppose que vous essayez d'accéder au contrôle du côté client. Dans ce cas, utilisez une variable masquée à la fin de la page et définissez la valeur sur le client du contrôle ASP. – rAm

0

Oui, je pense rAm est juste .. dans mes précédentes expériences .. J'ai remarqué que identifiant explicite fonctionne tout le temps et recommanderait même .. Andy

Questions connexes