2010-09-13 7 views
0

Мой пользовательский элемент управления содержит ретранслятор, который добавляет динамический элемент управления в placeholder на ItemDatabound.Клиентские значения динамического управления при обратной передаче

У меня возникла проблема с обновленным значением динамического элемента управления, я уже занимаюсь восстановлением динамических элементов управления Load, но сначала мне нужно получить изменения, внесенные пользователем. У меня просто возникают проблемы с пониманием того, где в Lifecycle - лучшее место для доступа к обновленному значению динамического управления.

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

ответ

0

Если кто натыкается на этой странице, это веб-сайте, который получил меня на правильном пути: http://www.learning2code.net/Learn/2009/8/12/Adding-Controls-to-an-ASPNET-form-Dynamically.aspx

В моем случае контроля я помещал в моем заполнителе был также динамическим (управляемые данные) на основе типа перечисления, который определяет, есть ли CheckBox, ListBox, Textbox, RadDatePicker и т. д. будет вставлен в местозаполнитель.

Поскольку у меня был ретранслятор с несколькими заполнителями вместо одного заполнителя, содержащего все мои динамические элементы управления, такие как предоставленная связь, я реализовал свое решение следующим образом.

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); 
      } 
     } 
    } 

Вам по-прежнему приходится реализовывать код, проходящий через ретранслятор, и извлекает обновленные значения на стороне клиента из динамических элементов управления. Надеюсь, что это поможет, на самом деле потребовалось много работы, чтобы решить эту проблему.