2010-05-18 4 views
0

Cela devrait vraiment être beaucoup plus facile, je dois donc manquer quelque chose d'évident. J'ai une page C# ASP.NET qui est activée par AJAX. J'ai également un panneau ASP.NET qui est initialement vide mais je crée quelques listes déroulantes et les ajoute dans le code derrière. Cette partie fonctionne très bien. Cependant, lorsque la page fait une publication, les contrôles "disparaissent" et je ne peux pas les trouver du tout. Notez que le panneau lui-même n'est pas dans un panneau de mise à jour AJAX, je le mentionne seulement parce que je pense que cela pourrait être un problème viewstate.C# & AJAX - Ajouter des contrôles dynamiquement mais ne peut pas les trouver sur la publication

Ce code fonctionne très bien:

DropDownList newList = new DropDownList(); 
newList.ID = string.Format("lst{0}", opt.OptionName.ToString()); 

foreach (SaleItemOptions myOpt in opt.OptionsInList) 
    { 
newList.Items.Add(myOpt.OptionName); 
    } 

this.pnlOptions.Controls.Add(newList); 

Mais ce code renvoie toujours NULL

DropDownList myList = (DropDownList)this.pnlOptions.FindControl("lstSize"); 

J'ai vérifié que le nom de contrôle existe sous la forme et j'ai aussi utilisé des variations comme le ControlID, l'ID, etc.

De plus, il y a un facteur atténuant dans tout cela. J'utilise l'API GCheckout (Google Checkout pour ASP.NET) pour créer la publication. Cela ne devrait vraiment pas être un problème, mais je pensais que je le mentionnerais

Répondre

0

Les contrôles créés dynamiquement sont toujours perdus lors de la publication. Vous devrez les créer à chaque fois que vous postez un message. Si vous souhaitez conserver leurs valeurs sur plusieurs publications, vous devrez les suivre vous-même dans l'état d'affichage, la session ou les valeurs de publication envoyées à la page. Vous pouvez le faire en définissant l'ID unique des contrôles et en recherchant cette valeur.

+0

Pour cette raison, j'aime beaucoup MVC. – 7wp

+0

@Roberto, oui MVC rend cela plus facile et je suggère à l'OP de le regarder ici: http://www.asp.net/mvc/whatisaspmvc – Justin

3

Ajoutez-vous à nouveau les contrôles à la page après la publication? Vous devez le faire pour récupérer leurs valeurs, si ce n'est pas le cas, elles n'existent pas. Si vous les ajoutez à nouveau, vous pouvez obtenir leurs valeurs retournées. Le meilleur endroit pour le faire est de surcharger la méthode init de la page, de cette façon vos contrôles ajoutés dynamiquement sont instanciés en même temps que asp.net instancie les contrôles dans le balisage.

+0

J'oublièrent ans mentionner que je fais cela avec le LoadViewState avec ce code de MS: protected override void LoadViewState (objet savedState) { base.LoadViewState (savedState); if (ViewState ["controsladded"] == nul) AddControls (newSale); } –

Questions connexes