ASP.NET中继器-隐藏字段工作没有被声明



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周围有一个UpdatePanel,删除这会导致Visual Studio给我一个我期望的错误:'uxIsVisibleHiddenField'未声明。由于它的保护级别,它可能无法进入。

只有在中继器外部有一个具有相同ID的控件时才会发生这种情况。您不会有ID冲突,因为重复器是一个命名容器。

你们有AlternatingItemTemplate吗?

经过大量的调试,我唯一能说的是,当我有一个UpdatePanel在Repeaters ItemTemplate内,我不需要声明ItemTemplate内的控件在DataBind事件访问它们时,非常奇怪。取出UpdatePanel会导致编译器错误,所以UpdatePanel必须在Repeater和控件之间做一些自动连接。

谢谢你的建议。

最新更新