2013-05-07 3 views
2

Использование ASP.NET 4.0ASP.NET Repeater - HiddenField работает без объявления

Немного странное здесь, мой код работает, но я не знаю почему!

Так что есть некоторые 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) 

Но в этом конкретном случае se работает без декларативного заявления. Может ли кто-нибудь пролить свет на то, почему он это сделает?

Обратите внимание, что это пример кода, а не мой фактический код.

EDIT

забыл упомянуть есть UpdatePanel вокруг каждого RepeaterItem, убрав это приводит к Visual Studio, чтобы дать мне ошибку, что бы я бы ожидать: «uxIsVisibleHiddenField» не объявлен. Он может быть недоступен из-за его уровня защиты.

+0

Действительно ли значение действительно обновляется? –

+0

проверить это в debuger, в чем проблема? – Roar

+0

В отладчике он получает контроль в порядке и устанавливает значение. – Darthtong

ответ

0

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

Спасибо за все ваши предложения.

1

Это может произойти только в том случае, если у вас есть элемент управления с тем же идентификатором, который находится за пределами ретранслятора. У вас не будет ID-сбоев, потому что ретранслятор является именованным контейнером.

+0

Точно, что я думал, но нет другого контроля вне ретранслятора с тем же ID! – Darthtong

+0

Это веб-приложение или веб-сайт? Это всегда могло быть остаточным контролем в файле дизайна. Я дублировал этот точный код, не имея возможности воспроизвести вашу проблему. – ScottE

+0

Это веб-сайт, я пробовал очистить решение, но он продолжает работать. – Darthtong

0

У вас есть AlternatingItemTemplate? Он может быть объявлен в этой конкретной области и остался незамеченным.

+0

Нет, спасибо за предложение. – Darthtong

Смежные вопросы