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 :

Modifier un label a partir d'une class


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 57
    Par défaut Modifier un label a partir d'une class
    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"
    <asp:Label ID="lblCreer" runat="server" Text=""></asp:Label>

    depuis "test.vb" dans le page_load
    modif_controls("test.aspx")


    Puis dans un fichier vb global, 'modif_controls.vb' je voudrais affecter une valeur au label via la fonction modif_controls():

    Faire la meme chose que si je fesait:
    lblCreer.Text = "toto" dans test.vb

    Sachant que je récupere Id et Text de mon label via une requete spécifique suivant le nom de la page. Mais cette partie la est ok

    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/

  2. #2
    Membre éclairé Avatar de loulouklm
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    99
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 99
    Par défaut
    Tu ne peux pas atteindre un contrôle inconnu par ta classe. Comment veux-tu que la relation se fasse ?
    Il faudrait instancié la page dans ta classe. Mais je ne pense pas que ce soit ton but... Tu veux probablement modifier ton contrôle dans cette classe que tu appellerais via la page test.aspx.vb ?

    Donne nous ton problème dans la globalité, je pense que tu n'as pas la bonne démarche.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 57
    Par défaut
    Default.aspx
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <asp:Label runat="server" ID="lbl" Text=""></asp:Label>
    Default.aspx.vb
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            load_forms("Default.aspx")
    End Sub
    Web_extractor.vb
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    Shared Function load_forms(Byval page As String) As Boolean
            Dim controls_line As String = extract_data(page)
            Dim control() As String = Split(controls_line, ",")
                Select Case control(1)
                    Case "Label"
                        fill_label(control)
                    Case "ListBox"
                        fill_listbox(control)
                    Case "ComboBox"
                        fill_combobox(control)
                    Case "GridView"
                        fill_gridview(control)
                End Select
                i += 1
            End While
     End Function
     
    Shared Function fill_label(ByVal controls() As String) As Boolean
    /* Assignation des valeurs dans le label de default.aspx */
    /* controls(0) ---> ID  (Dans l'exemple 'lbl')                 */
    /* controls(1) ---> Type (Dans l'exemple 'Label')          */
    /* controls(2) ---> Text ( "test label value" par exemple */
     
    End Function
    Tout fonctionne parfaitement jusqu'a la fonction fill_label ou je ne sait pas comment faire pour faire référence au attribut de default.aspx

    y aurait'il un paramètre a passer de default.aspx.vb à Web_extractor.vb pour faire cela ?

    J'ai essayer des htmlcurrentcontext et plein d'objet bizarre mais sans succès.

    Voila, j'espere que c'est plus clair. merci

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 103
    Par défaut
    effectivement, il veut tendre vers ce qu'on souhaite tous, réduire le couplage entre une page et le code logique.
    malheureusement il a une démarche, qui va à l'inverse d'une démarche habituelle dans ce genre de cas.

    Globalement tu ne te pose pas les bonnes questions.

    Microsoft lorsqu'ils ont conçut Dotnet, ont intégré, dans les technologies Winforms, ASP.NET et WPF, une notion de "DATA-BINDING".

    C'est cette notion de "liaison aux données" qui va s'occuper de réduire le couplage entre ton UI et ton code logique...
    En fait le but de cette technique, est d'indiquer à ASP.NET que je vais asservir un label à une donnée particulière quelconque, de ton domaine de données.
    A chaque changement d'état de la page, si cette donnée a changé d'état, alors grâce à la liaison de données précédemment définie, le label reflètera ce nouvel état et non plus l'ancien.

    Ensuite tu essaie de découpler ton programme en utilisant une classe boite ou outils, qui va devenir vite ingérable et ce que tu essaie de faire, c'est aussi, faire un découpage comme on le ferais avec ASP.NET MVC...
    aussi je te conseillerai de t'orienter dans cette voie.

    ASP.NET MVC couplé au databinding te permettraient, je pense, de résoudre ta problématique avec un minimum de code.

    en plus ton problème vient du fait qu'une page est instanciée indépendamment de tes classes.
    Tu essaie de définir les valeur d'objets dont tu ne connais pas les références, car tu ne connais pas dans tes classes, la référence de la page conteneur.
    En plus ton modèle est un "module" ou classe statique, typiquement un manager, qui n'a donc pas d'instance, il faudrait demander à la page de lui transmettre sa référence, mais je te déconseilles de faire de la sorte, car là, il ne te reste, au vue de ton code que l'option de la Reflexion, qui est à utiliser avec une extrême précaution et parcimonie, surtout dans un projet ASP.NET.

    j'ai envie de dire que là... tu va très vite te retrouver le nez dans le mur, et ton projet va très vite devenir totalement impossible à maintenir, si tu persiste dans cette voie.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 57
    Par défaut
    Pourtant dans le projet nous avons déja une classe qui en recevant un:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ByVal contenu As HtmlGenericControl
    Modifie le contenu des Labels et cela est visible au niveaux de la page aspx avec des choses comme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Dim lbl As New Label
    lbl.Text = le_resultat
    lbl.ID = identifiant
    contenu.Controls.Add(lbl)
    Qu'est se que vous en dite ?

    Enfin merci quand même mais incluant mon code dans un projet beaucoup plus gros et étant plusieurs dévellopeur sur le coup je peut pas tout refaire en architecture MVC malheureusement.

  6. #6
    Membre éclairé Avatar de loulouklm
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    99
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 99
    Par défaut
    Le code ci-dessus manipule des contrôles. Toi tu manipules des "string"... Peut-être une piste.

    Que fait la fonction extract_data ?

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 57
    Par défaut
    Elle récupère dans une bdd les valeurs à affecter a une page:
    par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    extract_data("default.aspx")
    Accède a une base de donnée ou il ya:
    [page][data]
    [default.aspx][lbl,Label,'test']
    [tata.aspx][cb,ComboBox,1475]

    La fonction extract_data me renvoit une string ---> lb,Label,'test'

    Bon c'est une version simplifier que je vous présente la. mais l'idée est la.

    j'ai essayer des truk comme cela mais sans succès:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    function fill_label(Byval control as string)
       Dim ret_label as Label
       ret_label.ID = control(0)
       ret_label.Text = control(2)
    /* ??? */
    end function
    A partir des ??? ca bloque, comment affecter ce label a ma page default.aspx ^^;

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 30/05/2007, 15h51
  2. Réponses: 1
    Dernier message: 22/06/2006, 09h17
  3. Réponses: 6
    Dernier message: 21/05/2006, 20h37
  4. Réponses: 12
    Dernier message: 03/11/2005, 18h45

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