ASP.NET Repeater - HiddenField работает без объявления
Использование ASP.NET 4.0
Немного странно, мой код работает, но я не знаю почему!
Итак, у меня есть немного HTML, например, так:
<asp:Repeater runat="server" ID="uxMyRepeater" ClientIDMode="Predictable">
<ItemTemplate>
<asp:Button runat="server" Text="Submit" />
<asp:HiddenField runat="server" ID="uxIsVisibleHiddenField" Value="0" />
</ItemTemplate>
</asp:Repeater>
И задний конец:
Protected Sub uxMyRepeater_ItemCommand(source As Object, e As RepeaterCommandEventArgs) Handles uxMyRepeater.ItemCommand
uxIsVisibleHiddenField.Value = "1"
End Sub
По какой-то причине это работает, обычно я ожидал бы объявить uxIsVisibleHiddenField в uxMyRepeater_ItemCommand следующим образом:
Dim uxIsVisibleHiddenField As HiddenField = DirectCast(e.Item.FindControl("uxIsVisibleHiddenField"), HiddenField)
Но в данном конкретном случае это работает без декларативного заявления. Может кто-нибудь пролить свет на то, почему он это сделал?
Обратите внимание, что это только пример кода, а не мой фактический код.
РЕДАКТИРОВАТЬ
Забыл упомянуть, что вокруг каждого RepeaterItem есть панель обновления, удаление которой приводит к тому, что Visual Studio выдаёт мне ошибку, на которую я мог бы рассчитывать: "uxIsVisibleHiddenField" не объявлено. Может быть недоступен из-за уровня защиты.
3 ответа
После многих отладок я могу сказать только одно: когда внутри элемента Repeaters ItemTemplate есть UpdatePanel, мне не нужно объявлять элементы управления внутри ItemTemplate при обращении к ним в событии DataBind, что очень странно. Извлечение UpdatePanel приводит к ошибкам компилятора, поэтому UpdatePanel должен выполнять некоторую автоматическую привязку между Repeater и элементами управления.
Спасибо за все ваши предложения.
Это может произойти, только если у вас есть элемент управления с тем же идентификатором, который находится за пределами повторителя. У вас не будет столкновений ID, потому что ретранслятор является контейнером имен.
Есть ли у вас какие-либо AlternatingItemTemplate
? Это может быть объявлено в этой конкретной области и осталось незамеченным.