ASP.NET Repeater - HiddenField在未声明的情况下工作

时间:2013-05-07 11:53:36

标签: asp.net repeater asp.net-4.0 databound itemcommand

使用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

因此,由于某种原因这种方法有效,通常我希望必须在uxMyRepeater_ItemCommand中声明uxIsVisibleHiddenField,如下所示:

Dim uxIsVisibleHiddenField As HiddenField = DirectCast(e.Item.FindControl("uxIsVisibleHiddenField"), HiddenField)

但在这种特殊情况下,它没有声明性陈述。任何人都可以解释为什么会这样做吗?

请注意,这只是示例代码,而不是我的实际代码。

修改

忘记提到每个RepeaterItem周围都有一个UpdatePanel,删除它会导致Visual Studio给出一个我期望的错误:'uxIsVisibleHiddenField'未声明。由于其保护级别,它可能无法访问。

3 个答案:

答案 0 :(得分:1)

只有当控件具有位于转发器外部的相同ID时,才会发生这种情况。您不会发生ID冲突,因为转发器是命名容器。

答案 1 :(得分:0)

你有AlternatingItemTemplate吗?它可能在该特定区域被宣布并且仍未被注意到。

答案 2 :(得分:0)

经过大量调试之后我唯一可以说的是当我在Repeater ItemTemplate中有一个UpdatePanel时,我不需要在DataBind事件中访问它时声明ItemTemplate中的控件,这很奇怪。取出UpdatePanel会导致编译器错误,因此UpdatePanel必须在Repeater和控件之间进行一些自动连接。

感谢你的所有建议。