Propriété clientID d'une texte box

Signaler
Messages postés
14
Date d'inscription
samedi 17 juillet 2004
Statut
Membre
Dernière intervention
19 mars 2005
-
Messages postés
14
Date d'inscription
samedi 17 juillet 2004
Statut
Membre
Dernière intervention
19 mars 2005
-
bonjour,

j'ai un petit problème :
je veux récupérer, côté serveur, l'id d'une asp:textbox qui va être générée côté client.

pour cela il existe une propriété de la textebox qui est clientID.
Le problème est que cela me renvoie d'id serveur de mon contrôle...

voici le code correspondant :

protected System.Web.UI.WebControls.TextBox TextBoxAddLink;

private void DataList1_ItemCreated(object sender, System.Web.UI.WebControls.DataListItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.EditItem)
Response.Write(TextBoxLink.ClientID + "\n"); // affiche l'ID et non le ClientID...

}

Merci.
armand.

6 réponses

Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
27
il me semble que par defaut le ClientID est le meme que l'ID, il est different dans le cas ou le controle est dans un UserControl (ascx) ou qu'il se situe dans un datagrid etc...

donc l'erreur serait normal. mais je vois que tu es dans une datalist (pas toi mais le controle :) ) alors c'est vrai que ce serait bizarre... je peux avoir le rendu HTML ? avec ce qu'il te donne comme clientID ? et aussi le code HTML du datalist.
Petite remarque, je sais pas si c'est normal, mais tu demande le clientID de TextBoxLink, et tu nous montre la declaration de TextBoxAddLink ...

Cyril

PS : Il existe une version de CodeS-SourceS spécialisé pour l'asp : aspfr.com pose tes questions la bas, tu auras plus de réponses :)
Messages postés
14
Date d'inscription
samedi 17 juillet 2004
Statut
Membre
Dernière intervention
19 mars 2005

oui, c'est vrai que j'aurai du poster dans aspfr.com !

je vais quand même te répondre ici.

Pour ce qui est de la déclaration du controle je me suis trompé dans mon copier / coller, voici la bonne déclaration :

protected System.Web.UI.WebControls.TextBox TextBoxLink;

et voici le rendu html du controle :
<input name="DataList1:_ctl2:TextboxLink" type="text" value="http://intranet.inet.grs.net" id="DataList1__ctl2_TextboxLink" ...

petite précision : ce controle est disponible uniquement sur la ligne du datalist qui est en mode édition.

J'avais donc essayé de "finter" en disant que :
clientID = "DataList1__ctl2_" + TextBoxLink.ID
mais en fait ca ne marche pas car le numéro derière "__ctl" change pour chaque ligne (argghh..).
Pas moyen donc de finter.

autre précision : ce controle n'est pas dans un userControl mais dans une page aspx normale.

merci,
Armand.
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
27
ok. C'est normal qu'il te retourne l'id du client en cours, je viens d'y penser mais comment le client peut il savoir de quel textbox il sagit ? certes il est dans l'evenement de la création de la liste, mais ca ne suffit pas, la il a l'id du control en general.
pour trouver le textbox correspondant, il faut se servir de e, la dedans tu dois pouvoir recuperer ton controle, faut surement patauger, pour trouver ou car je ne sais pas, mais avec l'intelissens rien de plus simple ;)

essaye peut etre un e.FindControls(textboxLink.Id) ou quelque chose de ce coté la :)

Cyril
Messages postés
14
Date d'inscription
samedi 17 juillet 2004
Statut
Membre
Dernière intervention
19 mars 2005

salut,

j'ai essayé de m'en sortir avec ça :
e.item.findcontrol(TextBoxLink.ID).clientID

Mais rien à faire, l'ID qui m'est retourné est toujours l'ID côté serveur.

La je commence vraiment à désespérer...
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
27
essaye ca :

Private Sub dl_ItemCreated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataListItemEventArgs) Handles dl.ItemCreated
For Each c As Control In e.Item.Controls
Response.Write(c.ClientID)
Next
End Sub

sinon t'as VS.net ?

si oui met un point d'arret sur ta sub, et explore e, il doit bien se trouver quelque part.

Sinon on va faire du bricolage, en "finter", mais :sad) j'aime pas cette solution, si j'ai le temps ce soir, je regarde ca

@+

Cyril
Messages postés
14
Date d'inscription
samedi 17 juillet 2004
Statut
Membre
Dernière intervention
19 mars 2005

Bonjour,



Merci beaucoup pour vos réponses.

Malheureusement rien ne fonctionne.



J'ai donc fais une grosse bidouille qui fonctionne (enfin qui sauve les apparences ):

au lieu de prendre le ClientID, j'ai écrit en dure : DataList1__ctlX_TextboxLink,

X étant le contenu d'une texte box invisible qui correspond au numéro de la ligne dans le Datalist.



Jesusonline, si ta solution est moin porc que la mienne, je suis preneur !



Armand.