2010-09-13 5 views
0

Mon contrôle personnalisé contient un répéteur qui ajoute un contrôle dynamique dans un espace réservé sur ItemDatabound.Valeurs côté client du contrôle dynamique à la publication

Je rencontre un problème d'accès à la valeur mise à jour du contrôle dynamique, je m'occupe déjà de reconstruire les contrôles dynamiques sur Load mais je dois d'abord accéder aux modifications apportées par l'utilisateur. J'ai juste du mal à comprendre où dans le cycle de vie est le meilleur endroit pour avoir accès à la valeur de contrôle dynamique mise à jour.

<Repeater> 
    <ItemTemplate> 
     <Label /><PlaceHolder /> 

Répondre

0

Si quelqu'un qui tombe par hasard sur cette page c'est le site qui m'a sur la bonne voie: http://www.learning2code.net/Learn/2009/8/12/Adding-Controls-to-an-ASPNET-form-Dynamically.aspx

Dans mon cas, le contrôle que je mettais dans mon espace réservé a également été dynamique (basée sur les données) basé sur un type enum qui a déterminé si un CheckBox, ListBox, Textbox, RadDatePicker, ect. serait inséré dans l'espace réservé.

Comme j'avais un répéteur avec plusieurs espaces réservés au lieu d'un seul espace réservé contenant tous mes contrôles dynamiques comme le lien fourni, j'ai implémenté ma solution comme suit.

On the method that adds your dynamic controls to the placeholder (ItemDataBound): 
1. Give the dynamic control a unique ID (string) 
2. Add the unique ID & enum type to the Dictionary<enum, string> that will be stored in the ViewState 

Override the LoadViewState method as follows (this will load your Dictionary<enum, string> array): 
    protected override void LoadViewState(object savedState) 
    { 
     base.LoadViewState(savedState); 
    } 

Override the OnLoad method to add the dynamic controls that were cleared on postback: 
    protected override void OnLoad(EventArgs e) 
    { 
     base.OnLoad(e); 

     if (IsPostBack) 
      AddDynamicControlsToPlaceholder(); 
    } 

    private void AddDynamicControlsToPlaceholder() 
    { 
     foreach (RepeaterItem item in reapeater.Items) 
     { 
      if (item.ItemType == ListItemType.Item || item.ItemType == ListItemType.AlternatingItem) 
      { 
       var keyValue = DynamicDictValues.ElementAt(item.ItemIndex); 
       var plhDynControl = item.FindControl("plhDynControl") as PlaceHolder; 
       //CreateDynamicControl method uses the key to build a specific typeof control 
       //and the value is assigned to the controls ID property. 
       var dynamicControl = CreateDynamicControl(keyValue); 
       plhItemValue.Controls.Add(dynamicControl); 
      } 
     } 
    } 

Il vous reste à mettre en œuvre le code qui boucle par le répéteur et tire les valeurs du côté client mis à jour à partir des commandes dynamiques. J'espère que cela aide, il a vraiment fallu beaucoup de travail pour résoudre celui-ci.

Questions connexes