Обновление заполнителя во время выполнения
-
19-09-2019 - |
Вопрос
вот проблема, с которой я столкнулся с заполнителем:
У меня есть ретранслятор, и внутри этого ретранслятора есть шаблон элемента.Теперь этот шаблон отформатирован с помощью пары таблиц, но для этого вопроса я удалил их, чтобы было легче читать:
<asp:Repeater ID="Repeater1" OnItemDataBound="R1_ItemDataBound" runat="server">
<ItemTemplate>
<asp:PlaceHolder ID="phAnswers" runat="server"></asp:PlaceHolder>
</ItemTemplate>
</asp:Repeater>
Затем в событии OnItemDataBound я создаю новый заполнитель, привязываю его к существующему (phAnswers), однако заполнитель не обновляется созданными радиокнопками/текстовыми полями:
Dim rdList As New RadioButtonList
Dim newRadio As New RadioButton
If (e.Item.ItemType = ListItemType.Item) Or _
(e.Item.ItemType = ListItemType.AlternatingItem) Then
Dim tempPH As PlaceHolder
tempPH = e.Item.FindControl("phAnswers")
For x As Integer = 0 To (t_MC.Count - 1)
newRadio = New RadioButton
newRadio.ID = "Answer" + x.ToString
newRadio.Text = t_MC(x).Value
rdList.Controls.Add(newRadio)
Next
tempPH.Controls.Add(rdList)
Есть идеи, почему phAnswers не обновляется новым заполнителем tempPH?Ваше здоровье
Решение
OnItemDataBound может быть слишком поздно для добавления элементов управления.Попробуйте это в OnItemCreated и посмотрите, поможет ли это.Это быстрый тест — просто измените объявление события ретранслятора следующим образом:
OnItemCreated="R1_ItemDataBound"
Если эта идея не поможет, вы можете легко переключить ее обратно.
Редактировать - я только что заметил кое-что.Чтобы заполнить RadioButtonList, вы должны использовать ListItems, например:
ListItem item - new ListItem("your text", "your value");
rdList.Items.Add(item);
Вероятно, поэтому ваш RadioButtonList не появился, но работали одинокие переключатели.
Другие советы
Попробуйте использовать Panel
вместо PlaceHolder