Modifier ID asp dans une class [Résolu]

Messages postés
61
Date d'inscription
dimanche 8 novembre 2009
Statut
Membre
Dernière intervention
19 octobre 2010
- - Dernière réponse : Nitrakz
Messages postés
61
Date d'inscription
dimanche 8 novembre 2009
Statut
Membre
Dernière intervention
19 octobre 2010
- 1 sept. 2010 à 09:40
Bonjour,

Tout est dans le titre, je vous explique plus en détail:
Dans ma page aspx, je dispose de control par exemple:

"test.aspx"



Puis dans un fichier vb global, 'modif_controls.vb' je voudrais affecter une valeur à cette commande:
lblCreer.Text = "test" par exemple.

Sachant que le lblCreer n'est pas passer en paramètres à ma fonction vb. (Je le récupère d'une requête qui m'indique quel valeur affecter a tel label d'une page suivant des paramètres passer a ma fonction.)

J'ajoute que je ne veut pas avoir à passer la valeur de mon label en paramètres vu que cette fonction traite un nombre variable d'élément.

Voila merci, j'espère avoir été asser clair sinon hésiter pas.
Merci, Sam/







There is no place like 127.0.0.1 /
Afficher la suite 

Votre réponse

15 réponses

Meilleure réponse
Messages postés
2859
Date d'inscription
mardi 15 avril 2003
Statut
Membre
Dernière intervention
26 novembre 2013
17
3
Merci
Plutôt LoadComplete

Par contre pour ce qui est du FindControl, je suis pas sûr à 100% mais il respecte la case pour les IDs de contrôles, donc si c'est le cas faut faire gaffe aux minusclules/majuscules.

Aussi si t'as un ContentPlaceHolder c'est que tu es dans une page enfant, je suppose?

Donc c'est :

Page.Master.FindControl("Content1")

Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 116 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Mayzz
Messages postés
61
Date d'inscription
dimanche 8 novembre 2009
Statut
Membre
Dernière intervention
19 octobre 2010
0
Merci
Quelqu'un ?

There is no place like 127.0.0.1 /
Commenter la réponse de Nitrakz
Messages postés
2859
Date d'inscription
mardi 15 avril 2003
Statut
Membre
Dernière intervention
26 novembre 2013
17
0
Merci
Salut,

Je ne vois pas trop ce que tu cherches à faire :

Puis dans un fichier vb global, 'modif_controls.vb' je voudrais affecter une valeur à cette commande:
lblCreer.Text = "test" par exemple


Cette ligne, il te faudra la mettre dans une procédure, procédure que tu devras forcément appeler, sinon comment veux-tu que le programme devine quand il faudra l'exécuter ?!

D'autre part, la page s'instancie de la demande du navigateur client, donc aucun fichier de classe, même instancié par ta page, ne sera capable de retrouver celle-ci sans passage d'argument, ce n'est pas un projet Winform ou les éléments sont comptés, c'est un projet web ou n'importe quelle page peut être demandé à n'importe quel moment. Ce que tu demande est logiquement impossible.

De plus ta méthode est un peu illogique, tu devras forcément passer par le code de la page elle même.

Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
Commenter la réponse de Mayzz
Messages postés
61
Date d'inscription
dimanche 8 novembre 2009
Statut
Membre
Dernière intervention
19 octobre 2010
0
Merci
Bien sur j'appelle la fonction contenu dans 'modif_controls.vb' via ma page default.aspx.vb.

dans le page_load j'ai un appel a ma fonction qui est dans modif_controls.vb

There is no place like 127.0.0.1 /
Commenter la réponse de Nitrakz
Messages postés
1648
Date d'inscription
samedi 6 novembre 2004
Statut
Modérateur
Dernière intervention
28 avril 2011
3
0
Merci
Salut,

Tu as plusieurs choix, le plus simple est de passer un contrôle parent à ta fonction, et d'utiliser sa propriété FindControl pour récupérer tes contrôles.
Dans le code-behind (default.aspx.vb) :
ModifControl(Me)

Dans modif_controls.vb :
Public Sub ModifControl(page As System.Web.UI.Page)
Label lblCreer = CType(page.FindControl("lblCreer"),Label)
' la suite ...

lblCreer.Text = "toto"
End Sub


Si tous tes contrôles sont dans le même conteneur, genre un Panel, tu peux passer celui-là directement, plutôt que la page elle-même comme dans l'exemple.
Commenter la réponse de cs_Nurgle
Messages postés
61
Date d'inscription
dimanche 8 novembre 2009
Statut
Membre
Dernière intervention
19 octobre 2010
0
Merci
ca fonctionne pas mon Label est toujours vide je capte pas, en fait il arrive pas a le trouver avec findcontrols, si je fait un test

if lblcreer is nothing then
 return false
end if
lblcreer.text = "test"


il return toujours false:


There is no place like 127.0.0.1 /
Commenter la réponse de Nitrakz
Messages postés
1648
Date d'inscription
samedi 6 novembre 2004
Statut
Modérateur
Dernière intervention
28 avril 2011
3
0
Merci
FindControl ne cherche par défaut que dans le contrôle lui-même, pas les sous-contrôles.

Si il est dans un autre contrôle, un Panel par exemple, fait un premier FindControl pour trouver le Panel, et ensuite tu y trouveras ton Label de la même façon.

A+
Nurgle
Commenter la réponse de cs_Nurgle
Messages postés
61
Date d'inscription
dimanche 8 novembre 2009
Statut
Membre
Dernière intervention
19 octobre 2010
0
Merci
Heu c'est a dire ?

Si j'ai:







je fait d'abord un:
Page.FindControl("Content1")

Dim lbl_sent As New Label
lbl_sent = CType(Page.FindControl("LbComp"), Label)
If lbl_sent Is Nothing Then
  Return False
End If
lbl_sent.Text = "test"

?
There is no place like 127.0.0.1 /
Commenter la réponse de Nitrakz
Messages postés
61
Date d'inscription
dimanche 8 novembre 2009
Statut
Membre
Dernière intervention
19 octobre 2010
0
Merci
Bump ?

There is no place like 127.0.0.1 /
Commenter la réponse de Nitrakz
Messages postés
2859
Date d'inscription
mardi 15 avril 2003
Statut
Membre
Dernière intervention
26 novembre 2013
17
0
Merci
FindControl retourne l'objet trouvé, donc se serait plutôt:

Try
   Dim Conetent1 As ContentPlaceHolder = DirectCast(Page.FindControl("Content1"), ContentPlaceHolder)
   Dim lbl_sent As Label = DirectCast(Conetent1.FindControl("LbComp"), Label)
   lbl_sent.Text = "test"
Catch Ex As Exception
   '
End Try



Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
Commenter la réponse de Mayzz
Messages postés
61
Date d'inscription
dimanche 8 novembre 2009
Statut
Membre
Dernière intervention
19 octobre 2010
0
Merci
Toujours pas il arrive pas a trouver le control "Content1"
je capte pas

Est se que mon appel a la fonction doit être placer dans le page_load ?


There is no place like 127.0.0.1 /
Commenter la réponse de Nitrakz
Messages postés
61
Date d'inscription
dimanche 8 novembre 2009
Statut
Membre
Dernière intervention
19 octobre 2010
0
Merci
Je suis bien dans une page fille, toujours pas de signe de vie du content1

There is no place like 127.0.0.1 /
Commenter la réponse de Nitrakz
Messages postés
2859
Date d'inscription
mardi 15 avril 2003
Statut
Membre
Dernière intervention
26 novembre 2013
17
0
Merci
T'es sûr à 100% de son ID ?

Parce que je vois Content1. Content est le contenu du ContentPlaceHolder sur la page enfant, mais l'ID de contrôle d'origine reste ContentPlaceHolder1.

Donc :

Try
   Dim CPH1 As ContentPlaceHolder = DirectCast(Page.Master.FindControl("ContentPlaceHolder1"), ContentPlaceHolder)
   Dim lbl_sent As Label = DirectCast(CPH1.FindControl("LbComp"), Label)
   lbl_sent.Text = "test"
Catch Ex As Exception
   '
End Try


Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
Commenter la réponse de Mayzz
Messages postés
1648
Date d'inscription
samedi 6 novembre 2004
Statut
Modérateur
Dernière intervention
28 avril 2011
3
0
Merci
Un peu en retard... :
Effectivement, tu ne peux pas trouver Content1, ce contrôle disparait à la création de la page.
Par contre, ContentPlaceHolder1 est bien toujours là.
Le code de Mayzz est le bon, et le seul moyen d'obtenir tes contrôles.

Pour la petite histoire, tout ça est une question de NamingContainer : FindControl ne cherche pas dans les NamingContainers depuis l'extérieur du container, il faut appeler FindControl au sein du NamingContainer qui contient les contrôles à trouver.
Tous les PlaceHolders en sont, tout comme la MasterPage elle-même, d'où le passage par le ContentPlaceHolder, et d'où le Page.Master.FindControl(...) et pas Page.FindControl(...) pour le trouver.
Un bon article sur le sujet, qui détaille tous les problèmes de ClientID que ça pose :
Control ID Naming in Content Pages[en]
Commenter la réponse de cs_Nurgle
Messages postés
61
Date d'inscription
dimanche 8 novembre 2009
Statut
Membre
Dernière intervention
19 octobre 2010
0
Merci
Impec cela fonctionne, oui je mettais effectivement pas le bon 'Id',
Merci a vous les dudes !

There is no place like 127.0.0.1 /
Commenter la réponse de Nitrakz

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.