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 :

Récupérer un contrôle dynamique dans le ViewState


Sujet :

ASP.NET

  1. #1
    Membre extrêmement actif
    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 : 53
    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
    Points : 1 434
    Points
    1 434
    Par défaut Récupérer un contrôle dynamique dans le ViewState
    Bonjour tout le monde

    Je suis confronté à un souci que je ne maitrise pas car je ne connais pas trés bien la manipulation du ViewState.

    Le contexte est un peu complexe mais je vais tenté de faire simple :
    je place un GridView dans le HTML et je le rempli par code Behind. Dans ce GRridView j'ai mis un ButtonField qui lance une action que j'ai placé dans une Sub (pour la lisibilité du code)
    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
    26
     
    Protected Sub OptionParagaphe(ByVal IdCompo As String)
            Dim ddl As New DropDownList
            Dim dtParagraphe As DataTable = New DManager("DataDev").RetournerTable("EXEC dbo.EG_ListeParagraphe '" & Session("SES_ApplicationStr") & "'")
            With ddl
                .ID = "ddlParagraphe"
                .EnableViewState = True
                .DataSource = dtParagraphe
                .DataTextField = "Para_Titre"
                .DataValueField = "ParagrapheId"
                .DataBind()
            End With
     
            Dim lblDDL As New Label
            With lblDDL
                .Text = "Choisir un paragraphe de texte dans la liste "
            End With
            With celOption
                With .Controls
                    .Add(lblDDL)
                    .Add(New LiteralControl("     "))
                    .Add(ddl)
                End With
            End With
     
        End Sub
    Comme vous pouvez le voir, cela créer une DDL. C'est elle qui me préoccupe, mais je vais avoir d'autre cas avec d'autres types de contrôles.

    Dans mon HTML j'ai également un bouton (qui est jsute en dessous, dans un autre TableRow) de la "CelOption".

    En cliquant sur ce bouton j'enregistre les informations qui ont été saisie.

    Le problème que j'ai est qu'il n'y a pas de contrôle dans le "CelOption" lorsque je clique sur le bouton à en juger par cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Protected Sub btnEnrOption_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnEnrOption.Click
            Dim btn As Button = sender
            Dim ddl As DropDownList = celOption.FindControl("ddlParagraphe")
    ici        Logage(celOption.Controls.Count)
            Dim idCompo As String = btn.CommandArgument
            Dim sel As String = ddl.SelectedValue
     
        End Sub
    La ligne de logage me retourne 0.

    Du coup, je me suis dis que les infos devaient être dans le ViewState, mais je ne trouve pas comment aller cherche ma DDL dans le ViewState, je ne comprends les explications que je trouve dans la MSDN.

    Subsidiairement, est ce le fait de mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                .EnableViewState = True
    sur ma DDL est suffisant pour la récupérer ?

    Merci pour votre aide.
    Mon blog de création d'univers : Qualhiryann
    Mon site qui parle de moi www.ozouf.com
    Pour les joueurs de WOW je suis sur Ysondres et mon perso est Ablanore.

  2. #2
    Membre extrêmement actif
    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 : 53
    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
    Points : 1 434
    Points
    1 434
    Par défaut
    A force de réfléchir, je me suis dit qu'il falait revenir à quelque chose de simple et j'ai simplifé mon code. Le viwState n'est peut-être pas la bonne solution, mais je ne l'écarte pas pour autant.

    Donc simple :
    côté HTML dans une page vide
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <asp:Button ID="btnaff" runat="server" Text="Affiche" />
        <asp:Table ID="tbl" runat="server">
        <asp:TableRow>
        <asp:TableCell ID="cel"></asp:TableCell>
        <asp:TableCell><asp:Button ID="btnddl" runat="server" Text="go" /></asp:TableCell>
        </asp:TableRow>
        </asp:Table>
    Côté CodeBehind :
    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
    26
    27
     
        Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init
     
        End Sub
     
        Protected Sub Affiche()
            Dim ddl As New DropDownList
            Dim IdCompo As String = "41907689-BE56-48BC-A3C9-6CFAEC5CCA68"
            Dim dtParagraphe As DataTable = New DManager("DataDev").RetournerTable("EXEC dbo.EG_ListeParagraphe '2e5f3857-d87a-4fd0-b8c7-bda6a6cf2d9c'")
            With ddl
                .ID = "ddlParagraphe"
                .DataSource = dtParagraphe
                .DataTextField = "Para_Titre"
                .DataValueField = "ParagrapheId"
                .DataBind()
                .SelectedValue = "41907689-BE56-48BC-A3C9-6CFAEC5CCA68"
            End With
            cel.Controls.Add(ddl)
        End Sub
     
        Protected Sub btnddl_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnddl.Click
            Logage(CType(cel.FindControl("ddlParagraphe"), DropDownList).SelectedValue)
        End Sub
     
        Protected Sub btnaff_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnaff.Click
            Affiche()
        End Sub
    Le logage est censé me renvoyer une String représentant un GUID (mais il pourrait n'importe quoi tant que c'est la SelectedValue de la DDL.
    Et donc, lorsque je clique sur le bouton il me dit :
    La référence d'objet n'est pas définie à une instance d'un objet.
    sur le logage, plus précisément sur la récupération de la SelectedValue de la DDL

    J'ai imaginé un souci avec le PostBack (vu que je gère pas dans l'exemple) mais j'ai fais machine arrière car dans le contexte final, tout se passe dans un UpdatePanel avec pas mal d'enchainement de table qui apparaisse et disparaisse, je ne suis pas sur que le PostBack soit gérable. Mais je reste ouvert à toute proposition ou idée.

    Donc, en résumé, mon souci est simple : récupérer la SelectedValue en conservant la méthode de cération de la DDL
    Mon blog de création d'univers : Qualhiryann
    Mon site qui parle de moi www.ozouf.com
    Pour les joueurs de WOW je suis sur Ysondres et mon perso est Ablanore.

Discussions similaires

  1. Gérer les contrôles dynamiques sans le ViewState
    Par Etanne dans le forum ASP.NET
    Réponses: 2
    Dernier message: 23/02/2012, 14h16
  2. récupérer des variables dynamique dans l'URL
    Par goldor dans le forum ActionScript 3
    Réponses: 9
    Dernier message: 19/09/2009, 02h41
  3. Création de contrôles dynamiques dans une frame
    Par Cidou dans le forum VBA Project
    Réponses: 0
    Dernier message: 14/05/2008, 10h14
  4. Réponses: 4
    Dernier message: 04/12/2006, 11h37
  5. Réponses: 2
    Dernier message: 09/10/2006, 17h21

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