User control dynamique et Viewstate

User control dynamique et Viewstate - C#/.NET managed - Programmation

Marsh Posté le 17-01-2004 à 10:52:08    

Voila, j'ai un probleme sur une page ASPX. Je souhaite instancier dynamiquement un nombre indefini du meme user control suite a un evenement de clic et les afficher.
 
Or, mon probleme, c'est si je reposte ma page, mes users control disparaissent, le viewstate ne les conserve pas!!!! (le repost de la page est suite a un autopostback d'un dropdownlist sur ce user control).
 
Comment faire?  
Merci

Reply

Marsh Posté le 17-01-2004 à 10:52:08   

Reply

Marsh Posté le 02-06-2005 à 16:11:48    

up je suis interessé :)

Reply

Marsh Posté le 18-07-2005 à 13:37:00    

up
si quelqu un a la réponse, je suis preneur

Reply

Marsh Posté le 18-07-2005 à 14:42:34    

on peut voir le code ?


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 18-07-2005 à 15:24:35    

nraynaud a écrit :

on peut voir le code ?


 
    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        If Not IsPostBack Then
            Dim c1 As UserControl = LoadControl("MyControls.ascx" )
            PlaceHolder1.Controls.Add(c1)
       End If
    End Sub

 
C est tout con mais quand je clic sur un bouton, ma page se recharge et le usercontrol qui était dans le PlaceHolder a disparu. Donc soit il faut empécher la page de se recharger mais je doute que ca soit la bonne solution soit une option m a échappée. J'ai bien fait attention, toutes les propriétés enableviewstate de mes controles sont à true. Là je bloque.

Reply

Marsh Posté le 18-07-2005 à 15:37:47    

[:pingouino]
 
c'est dans le on_click() du bouton que tu dois ajouter le contrôle. Inutile de toucher à cette méthode on_load.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 18-07-2005 à 15:55:59    

je veux bien mais je rajoute chaque usercontrol sur l'évènement clic de mon usercontrol donc il faut bien que j en place déjà un dans mon PlaceHolder au load de la page.
 
Ensuite quand je clic sur mon usercontrol et que je cherche a rajouter un controle dans le PlaceHolder, la page se recharge et tout ce qui était dans le PlaceHolder est perdu.

Reply

Marsh Posté le 18-07-2005 à 16:04:35    

ah oui ... ben tu enregistres le même handler pour tous les contrôles lors de leur création, et tu fais la différence sur la source de l'évènement ?


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 18-07-2005 à 16:53:31    

pour l instant j en suis juste a l ajout d un seul controle dynamique qui tient sur le refresh de la page mais j y arrive pas alors pour récupérer les évènements des controles créés on verra plus tard.
 
J ai vu plusieurs topic sur le viewstate mais ca me dit pas comment m en servir. Enfin bref, je suis perdu, rien ne marche.

Reply

Marsh Posté le 18-07-2005 à 18:09:34    

ben oublie le viewstate pour l'instant, c'est pas nécessaire.
Par contre, tu DOIS maîrtriser les évènements, c'est la base des interfaces utilisateur.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 18-07-2005 à 18:09:34   

Reply

Marsh Posté le 18-07-2005 à 18:19:32    

c est bon pour le viewstate, j ai trouvé la solution, j ai galéré dans plusieurs direction mais j ai fini par trouvé ce qu il me fallait dans la doc de .net
 

Code :
  1. Private lgNbCtrl As Long
  2.     Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  3.         If Not IsPostBack Then
  4.             lgNbCtrl = 0
  5.             If ViewState("controlsadded" ) Is Nothing Then
  6.                 AddControls()
  7.                 lgNbCtrl += 1
  8.             End If
  9.         End If
  10.     End Sub
  11.     Protected Overrides Sub LoadViewState(ByVal savedState As Object)
  12.         Dim i As Long
  13.         MyBase.LoadViewState(savedState)
  14.         If ViewState("controlsadded" ) = True Then
  15.             For i = 1 To lgNbCtrl
  16.                 AddControls()
  17.             Next
  18.         End If
  19.     End Sub
  20.     Private Sub AddControls()
  21.         Dim c1 As UserControl = LoadControl("MyControl.ascx" )
  22.         Panel1.Controls.Add(c1)
  23.         Panel1.Controls.Add(New LiteralControl("<BR>" ))
  24.         ViewState("controlsadded" ) = True
  25.     End Sub


 
Par contre maintenant j arrive plus a avoir mes évènements. En statique ca va mais maintenant que c est dynamique c est un peu plus difficile.

Reply

Marsh Posté le 18-07-2005 à 18:35:44    

[:pingouino] je jette l'éponge


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 22-07-2005 à 12:35:08    

Pour que les évenements fonctionnent, spécifie l'ID de tes UserControls chargés dynamiquement. Sinon l'ID va changer à chaque Postback et tes evenements ne fonctionneront pas.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed