IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

Insérer un composant utilisateur par code


Sujet :

ASP.NET

  1. #1
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut Insérer un composant utilisateur par code
    Salut

    J'ai fabriqué un composant utilisteur qui marche bien. Pour l'instant je le place dans ma page de manière classique, avec une balise @Register et une balise html de type <uc3:

    Et là, tout fonctionne bien.

    Maintenant je voudrais changer ça et faire cette insertion par le codeBehind. Mais dés que je fais ça il me dit que
    La référence d'objet n'est pas définie à une instance d'un objet.
    Et il pointe sur une ligne du CodeBehind du composant, la première où je fais une insertion de control dans la table que j'ai déclaré en HTML dans mon composant.
    Je vais mettre un peu de code pour illustrer.
    Voici mon CodeBehind de ma page :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    	Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    		Dim troupage As HtmlForm
    		troupage = Page.Controls(0).FindControl("form1")
    		Dim forminscrip As New jemprunte_Inscription
    		forminscrip.Mode = "inscription"
    		troupage.FindControl("cphCentral").Controls.Add(forminscrip)
    	End Sub
    Et le code HTML de la même page
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <asp:Content ID="Content1" ContentPlaceHolderID="cphMenuGauche" Runat="Server">
    	<uc1:MenuGaucheGlobal ID="MenuGaucheGlobal1" runat="server" />
    </asp:Content>
    <asp:Content ID="Content2" ContentPlaceHolderID="cphCentral" Runat="Server">
     
    </asp:Content>
    Puis le code HTML du composant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <%@ Control Language="VB" AutoEventWireup="false" CodeFile="Inscription.ascx.vb" Inherits="jemprunte_Inscription" %>
    <script type='text/javascript'> 
    	var tbCity_ClientItemSelected = function(sender, e){		$get('<%=hfVille.ClientID %>').value = e.get_value(); }	
    	var tbNaiss_ClientItemSelected = function(sender, e){		$get('<%=hfNaiss.ClientID %>').value = e.get_value(); }
    </script>
    <asp:TextBox ID="hfVille" runat="server" CssClass="invi"></asp:TextBox>
    <asp:TextBox ID="hfNaiss" runat="server" CssClass="invi"></asp:TextBox>
    <asp:Table ID="tblGene" runat="server"></asp:Table>
    Puis la partie du code Behind concernée par l'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Dim ro, roErr As New TableRow
    [...]
    tblGene.Rows.Add(ro)
    Entre ces deux lignes, je prépare plein de truc pour remplir mes cellules de tables, mais visiblement, c'est aps ça qui le dérange, c'est latable, il la trouve pas alors qu'elle est dans le HTML.
    J'ai tout de même essayé de la mettre dans le codeBehind, amis ça dvint la grosse mouise avec le reste du code et surtout le Script.

    Pouvez vous m'aider ?

  2. #2
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Par défaut
    tblGene n'est pas connu dans ta page

  3. #3
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Ben oui, puisque c'est dans mon composant.
    Le message d'erreur porte bien sur une ligne de mon composant, précisément la ligne que j'ai mis dans mon dernier encart de code.

    Mais je comprends pas pourquoi ça marche quand je fais l'insertion du composant par le HTML et ça marche plus quand je le fais par code. Est ce que cela ne viendrais pas de l'ordre de création des éléments ?
    Parce que je place mon composant dans la page sur le Page_Load et mon composant fabrique ses éléments dans le Page_Init

    Et enfin, tblGene n'est pas connu dans ma page, alors comment le faire connaitre ? Surtout que je ne souhaite pas qu'il soit directement dans la page, mais bien dans le composant. C'est le composant qui a besoins d'être fabriquer dans cette table.

    Merci pour ton aide.

  4. #4
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Par défaut
    C'est dans le code behind du composant ça?

  5. #5
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Oui, vu que la table est déclarée dans le HTML du composant.

  6. #6
    Membre chevronné
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2006
    Messages
    400
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 400
    Par défaut
    Bonjour,

    C'est pas un peu trop dynamique tout ça ?

    Il me semble que ton composant ajouté à la volée dans le Page_Load de la page n'est pas "rendu" avant la fin de l'évènement, donc son contenu n'existe pas .

    A la rigueur essai de déclarer une méthode protégée qui génère le tableau dans ton composant et tu appeles cette méthode dans le Pre_Render de ta page par exemple

    A suivre

  7. #7
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Merci pour ton aide.

    D'abords, non, ce n'est pas trop dynamique car le but est de faire en sorte que toutes les pages soient construite sur ce principe. L'entreprise est certes ambitieuse, mais à la fin, ça permetra aux utilisaterus d'être qausi autonome dans la gestion de leur site. L'idée est de faire une page Default.aspx qui prendra des paramettres grâce à la QueryString, le reste étant géré à partir de la base de données.

    Ensuite, je comprends le principe de ce que tu dis, mais j'ai un peu de mal à le mettre en application. Donc faire une méthode protégée, pour aprler du premire problème, est ce que c'est bien faire une truc comme ça :
    et donc enlever la balise HTML du composant.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Protected Sub ConstruireTableau()
    	Dim tbl As New Table
    	tbl.ID = "tblGene"
    	Me.Controls.Add(tbl)
    End Sub
    Ensuite comment je fais pour appeller cette méthode, je ne la trouve pas dans ma page.
    J'ai déplacé la déclaration de mon composant en faisant ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Public forminscrip As New jemprunte_Inscription
    juste en dessous du inherits.
    Dans mon Page_Load, tout marche, mais lorsque je tente d'obtenir la méthode que je viens de faire elle n'est aps là. PAr contre, toutes les autres (les pas Protected) oui, elles sont bien là.

    Merci pour ton aide.

  8. #8
    Membre chevronné
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2006
    Messages
    400
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 400
    Par défaut
    (Re) Bonjour

    'forminscrip' est déclaré en variable de classe (sous le inherits).

    Dans le Page_Load de ta page :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    [...]
    forminscrip.ConstruireTableau()
    [...]
    Ca, ça ne marche pas?

    Ensuite, tu peux laisser une instance de ton 'tblGene' dans l'aspx et lui ajouter des rows comme le montrait ton code dans les posts précédents

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    [...] 
    Protected Sub ConstruireTableau()
       Dim ro, roErr As New TableRow
       [...]
       tblGene.Rows.Add(ro)
    End Sub 
    [...]
    Je tache de faire un exemple dans l'aprés midi /soirée (le temps manque )

  9. #9
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    Atends avant de te lancer dans la contruction d'un exemple, même si ça me fait trés plaisir que tu consacre du temps sur mon souci.

    En farfouillant j'ai trouvé un truc qui me donne de bons résultats pour l'instant.
    Je ne sais ap si c'est la bonne méthode, ni même si elle va me permettre de faire tous ce que je veux faire, mais pour ma première page, ça roule.

    En fait, j'ai fait machine arrière sur mon composant, je l'ai remis comme au début, avec la déclaration de Table dans le HTML, et dans mon PAge_Load de ma Page j'ai mis ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    	Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    		Dim troupage As HtmlForm
    		troupage = Page.Controls(0).FindControl("form1")
    		Dim MenuGauche As New Control
    		MenuGauche = ParseControl("<CompoSite:MenuGaucheGlobal ID='MenuGauche' runat='server' />")
    		troupage.FindControl("cphCentral").Controls.Add(Inscript)
    		Dim Inscript As New Control
    		Inscript = ParseControl("<CompoSite:Inscription ID='Inscription' runat='server' Mode='Inscription' />")
    		troupage.FindControl("cphMenuGauche").Controls.Add(MenuGauche)
    	End Sub
    Troupage c'est pour trouver le Form de la MAsterPage, j'avasi fait un autre topic sur ce sujet.
    Puis je charge des Control, je les parse une bonne fois et hop, ça roule.
    Vu que je passe une chaine de caractère, je vasi pouvoir aller dans la BDD pour trouver tous les élément que je veux, je vasi pouvoir fabriquer mes prochains composants utilisateurs avec moult propriétés et hop, ça tourne bien.

    En plus, si fait un beau formualire dans une aprtie admin, l'utilisateur pourra manipuler les propriétés des composants autant qu'il veut et de mon côté je n'ai plus qu'à m'assurer que ce que je laisse en modification ne peux pas mettre en péril le site.

    Par exmple, mon, composant d'inscription est assez complet, dispose de plein de contrôle de saisie et l'utilisateur peut choisir quels champs il veut voir, si le dit champs est obligatoire et s'il faut un contrôle de saisie, indépendament de son caractère obligatoire. Le tout est stocké dans une base de données centralisé, ce qui permet au visiteru d'être connu des différents sites de la société et de faire des coregistration d'un seul coup. Donc il ne ressaisit pas ses coordonées.

    Bref, sauf si vous trouvez une truc à redire sur ce que j'ai trouvé, je crois que je vais partir dans cette voie. Qu'en pensez vous ?

    Genre, si vous connaissez un piège ou une limite importante de ce genre de chose.

  10. #10
    Membre expérimenté
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Par défaut
    rha, rha, j'ai oublié : mes composants utilisateurs sont déclarés dans mon Web.Config, sinon, ça marche moyen........

Discussions similaires

  1. Créer un utilisateur par code
    Par zooffy dans le forum ASP.NET
    Réponses: 6
    Dernier message: 15/04/2008, 12h32
  2. Réponses: 5
    Dernier message: 03/12/2007, 16h38
  3. ajouter un utilisateur au groupe users par code VBA ?
    Par electrosat03 dans le forum Access
    Réponses: 2
    Dernier message: 12/01/2007, 17h00
  4. PHP / MySQL : Création d'utilisateurs dans la DB par code PHP
    Par Sangdrax1604 dans le forum Administration
    Réponses: 6
    Dernier message: 07/09/2006, 17h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo