2

使用 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'。由于其保护级别,它可能无法访问。

4

3 回答 3

1

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

于 2013-05-07T12:07:16.173 回答
0

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

于 2013-05-08T09:54:15.270 回答
0

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

感谢您的所有建议。

于 2013-05-10T15:18:04.230 回答