2009-08-11 10 views
0

J'ai un problème étrange concernant les contrôles dynamiquement chargés dans une application asp.net.les contrôles dynamiquement chargés perdent des valeurs (ASP.NET)

Il y a donc un contrôle où l'utilisateur doit sélectionner certains éléments et/ou faire de la saisie de texte (zones de texte). Le contrôle dépend d'un seul élément de liste déroulante.

Donc l'utilisateur A choisit une certaine valeur dans cette liste déroulante "controlselector" -> on de nombreux contrôles seront chargés. Après cela, l'utilisateur clique sur enregistrer, puis il devrait l'enregistrer dans la base de données.

Le problème est que tous les éléments ne sont pas enregistrés dans la base de données.

Je crée et recréer le contrôle à chaque Page_Load, j'ai retourné autopost sur le "controlselector" mais le contrôle se charge à l'événement page_load. Lorsque vous essayez de sauvegarder les éléments sont vides, mais pas tous les articles :(

MyCustomControl: 
FillElements(someParameter) 
{ 
    //fill some lists, dropdowns, checkboxes or whatever with some values from db 
} 

Foo Save() 
{ 
    //Save selected input(also some textboxes) 
    //and return an object 
    return foo; 
} 

Page: 
Page_Load() 
{ 
    PlaceHolder.Clear(); 

    //with Createpath the path to the control is created and loaded 
    PlaceHolder.Controls.Add(LoadControl(CreatePath(Selector.SelectedValue))); 

    //some methods are started to fill some lists in the control 
    ((MyCustomControl)PlaceHolder.Controls[0]).FillElements(someParameter); 
} 

Save_Button_Click() 
{ 
    var myFoo = ((MyCustomControl)PlaceHolder.Controls[0]).Save(); 
    myFoo.DoSomethingElse(); 
} 

il semble que, parfois, la page se souvient des valeurs et parfois pas ... ver étrange tout

grâce

[EDIT ] le problème que je vois, il y a deux temps une action de remplissage dynamique. 1.) de décider qui et le chargement puis le contrôle personnalisé 2.) remplissant le contrôle personnalisé avec les paramètres

+1

avez-vous viewstate activé sur tous les contrôles dans votre UserControl? ViewState est-il activé sur le reste de la page et le UserControl lui-même dans son ensemble? – Fooberichu

+0

oui j'ai viewstate activé sur le usercontrol ... – nWorx

Répondre

0

merci pour votre aide, mais le problème était sur quelque chose de totalement différents les éléments qui ont été chargés dynamiquement dans les menus déroulants qui, où également chargés dynamiquement, avait une « \ n » caractère spécial, mais pas tous les éléments des thats pourquoi ne pas tous les éléments se sont perdus juste quelques

je ne sais pas si je devrais/peux marquer cela comme réponse, parce que le problème était sur un autre endroit

0

Vous devez vérifier "IsPostBack" si c'est vous ne voulez pas recréer ces contrôles ... il tue les valeurs etc que vous avez en eux. Essayez de changer votre code pour quelque chose comme ceci.

Page_Load() 
{ 
    if(IsPostBack == false){ 
    PlaceHolder.Clear(); 

    //with Createpath the path to the control is created and loaded 
    PlaceHolder.Controls.Add(LoadControl(CreatePath(Selector.SelectedValue))); 

    //some methods are started to fill some lists in the control 
    ((MyCustomControl)PlaceHolder.Controls[0]).FillElements(someParameter); 
    } 
} 
+0

C'est tellement werd. – JamieGaines

+0

pourquoi est-ce bizarre? – nWorx

3

Page_Load est trop tard dans le cycle de vie pour créer des contrôles dynamiques, parce que l'état est restauré à des contrôles avant l'événement de chargement. Cela signifie que vous devez créer votre contrôle plus tôt, ou ASP.Net ne le verra pas au moment de restaurer l'état. Essayez de les créer dans l'événement Init à la place. Ou, encore mieux, essayez l'une de ces options:

  • Créez un type de contrôle personnalisé qui s'adapte au besoin et possède une instance normale du contrôle sur la page.
  • Placez tous les contrôles sur la page, mais définissez uniquement Visible sur true pour celui qui vous intéresse.
+0

lorsque je déplace la création vers l'événement page_init ou oninit, il semble que ma liste déroulante, qui décide quel contrôle personnalisé doit être chargé, n'a encore aucune valeur .. donc le contrôle est chargé – nWorx

+0

J'ai essayé votre deuxième option aussi, pour placer les contrôles sur la page et juste les mettre en évidence ou pas ... mais le problème persiste .. je pense que c'est parce que les contrôles ont besoin de paramètres pour remplir leurs listes déroulantes ((MyCustomControl) PlaceHolder.Controls [0]) .FillElements (someParameter); – nWorx

Questions connexes