Если кто натыкается на этой странице, это веб-сайте, который получил меня на правильном пути: 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);
}
}
}
Вам по-прежнему приходится реализовывать код, проходящий через ретранслятор, и извлекает обновленные значения на стороне клиента из динамических элементов управления. Надеюсь, что это поможет, на самом деле потребовалось много работы, чтобы решить эту проблему.