Modifier ID asp dans une class

Résolu
Nitrakz Messages postés 60 Date d'inscription dimanche 8 novembre 2009 Statut Membre Dernière intervention 19 octobre 2010 - 25 août 2010 à 10:21
Nitrakz Messages postés 60 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 /

15 réponses

Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
27 août 2010 à 17:03
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.
3
Nitrakz Messages postés 60 Date d'inscription dimanche 8 novembre 2009 Statut Membre Dernière intervention 19 octobre 2010
25 août 2010 à 14:56
Quelqu'un ?

There is no place like 127.0.0.1 /
0
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
26 août 2010 à 05:05
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.
0
Nitrakz Messages postés 60 Date d'inscription dimanche 8 novembre 2009 Statut Membre Dernière intervention 19 octobre 2010
26 août 2010 à 09:27
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 /
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Nurgle Messages postés 1642 Date d'inscription samedi 6 novembre 2004 Statut Membre Dernière intervention 28 avril 2011 5
26 août 2010 à 12:01
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.
0
Nitrakz Messages postés 60 Date d'inscription dimanche 8 novembre 2009 Statut Membre Dernière intervention 19 octobre 2010
26 août 2010 à 13:23
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 /
0
cs_Nurgle Messages postés 1642 Date d'inscription samedi 6 novembre 2004 Statut Membre Dernière intervention 28 avril 2011 5
26 août 2010 à 13:49
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
0
Nitrakz Messages postés 60 Date d'inscription dimanche 8 novembre 2009 Statut Membre Dernière intervention 19 octobre 2010
26 août 2010 à 14:04
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 /
0
Nitrakz Messages postés 60 Date d'inscription dimanche 8 novembre 2009 Statut Membre Dernière intervention 19 octobre 2010
27 août 2010 à 11:10
Bump ?

There is no place like 127.0.0.1 /
0
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
27 août 2010 à 14:43
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.
0
Nitrakz Messages postés 60 Date d'inscription dimanche 8 novembre 2009 Statut Membre Dernière intervention 19 octobre 2010
27 août 2010 à 15:57
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 /
0
Nitrakz Messages postés 60 Date d'inscription dimanche 8 novembre 2009 Statut Membre Dernière intervention 19 octobre 2010
27 août 2010 à 17:29
Je suis bien dans une page fille, toujours pas de signe de vie du content1

There is no place like 127.0.0.1 /
0
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
27 août 2010 à 17:50
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.
0
cs_Nurgle Messages postés 1642 Date d'inscription samedi 6 novembre 2004 Statut Membre Dernière intervention 28 avril 2011 5
27 août 2010 à 21:23
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]
0
Nitrakz Messages postés 60 Date d'inscription dimanche 8 novembre 2009 Statut Membre Dernière intervention 19 octobre 2010
1 sept. 2010 à 09:40
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 /
0
Rejoignez-nous