2009-09-10 7 views
1

Parfois, je désespère quand je travaille avec ASP.Net - un autre problème qui ne devrait pas l'être!L'accès à ClientID interrompt la publication

Sur le formulaire Web, il existe une table ASP. Dans la table ASP, il y a un contrôle utilisateur auquel je fais des changements. Dans la table ASP, il y a une zone de texte .... rien d'extraordinaire à ce jour! Dans le code derrière, en tant que partie du Page_Load, j'ai besoin d'accéder au ClientID de la zone de texte pour enregistrer du javascript ... alors je le fais et le javascript semble faire tout ce qu'il faut. Tout le monde est content.

Non, apparemment tout le monde n'est pas content, ASP.Net lui-même est très mécontent!

En accédant au ClientID, l'identifiant qui apparaît dans la source est:

myControl_myTextBox 

commentant la ligne qui accède au ClientID signifie que l'id est rendu comme:

ctl00_BodyPlaceHolder_myControl_myTextBox 

La ligne accède à l'ID du client ressemble à ceci:

jsBuilder.AppendFormat(@"var filter = new TBFilter($(""#{0}"")[0]);", myTextBox.ClientID); 

Ceci en soi ne fait pas les deux moi, mais le fait que ça casse la publication, ça! Si vous tapez quelque chose dans cette zone de texte et cliquez sur le bouton Soumettre (il y a un bouton Soumettre sur la page!), Il recharge la page, mais remet la valeur par défaut dans la zone de texte et ignore complètement ce que vous aviez. Folie - Je n'ai rien fait de particulièrement bizarre et hors de l'ordinaire, alors pourquoi a-t-il cassé la publication?

+0

Si je comprends bien, la propriété ClientID pour la zone de texte est à l'origine ctl00_BodyPlaceHolder_myControl_myTextBox, mais après une publication, le ClientID est maintenant myControl_myTextBox pour la zone de texte? –

+0

Non désolé, si j'accède à la propriété ClientID, l'ID sort myControl_myTextBox, mais si je commente cette ligne, l'ID sort ctl00_BodyPlaceHolder_myControl_myTextBox - Je vais modifier la question pour refléter cela – Paul

+0

jsBuilder.AppendFormat (@ "var filter = new TBFilter ($ ("" # {0} "") [0]); ", myTextBox.ClientID); – Paul

Répondre

3

Le javascript que vous enregistrez dans le chargement de la page, fait-il quelque chose qui ne devrait pas arriver dans une publication? Si oui, vous devriez vérifier sur le Page.IsPostback pour contrôler quand l'utiliser.

Vous devez également être conscient que dans le cycle de vie de la page, Page_Load se produit avant tout événements de publication de contrôle (par exemple Click événement sur le bouton). Donc, si le code javascript que vous enregistrez dépend du résultat de l'événement Click, vous devez soit l'enregistrer dans l'événement Click (si cela ne devait se produire que lorsque vous avez cliqué sur ce bouton), ou l'événement Page_PreRender (si cela devait toujours arriver).

EDIT:
On pourrait aussi que certaines modifications sont apportées après Page_Load à la façon dont l'ID client de sont créés. Il est peut-être préférable de le faire dans l'événement Page_PreRender pour vous assurer que tout est terminé.

+0

Je l'ai déplacé dans Page_PreRender et cela semble résoudre le problème. Toujours ne pense pas que cela aurait dû être un problème en premier lieu! – Paul