2013-05-07 63 views
2

使用ASP.NET 4.0ASP.NET直放站 - 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 

所以出于某种原因这个作品,通常我会希望有uxMyRepeater_ItemCommand申报uxIsVisibleHiddenField像这样:

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

但是在这个特定的ca它在没有声明性陈述的情况下工作。任何人都可以阐明为什么它会这样做?

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

编辑

忘记提到有围绕每个的RepeaterItem一个UpdatePanel,除去这将导致Visual Studio来给我,倒是我期待一个错误:“uxIsVisibleHiddenField”未声明。由于其保护级别,它可能无法访问。

+0

值是否实际更新? – 2013-05-07 12:26:53

+0

在debuger中检查它是什么问题? – Roar 2013-05-07 12:35:50

+0

在调试器中,它获取控制权并确定设置值。 – Darthtong 2013-05-07 13:27:43

回答

0

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

感谢您的所有建议。

1

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

+0

准确地说,我认为,但没有其他控制以外的同一个ID的直放站! – Darthtong 2013-05-07 12:09:54

+0

这是一个web应用或网站吗?它可以始终是设计文件中的剩余控制。我重复了这个确切的代码,但没有能够重现您的问题。 – ScottE 2013-05-07 12:11:45

+0

这是一个网站,我试图清理解决方案,但仍然继续工作。 – Darthtong 2013-05-07 13:28:25

0

您有任何AlternatingItemTemplate?它可能在该特定领域宣布并且未被注意到。

+0

不,谢谢你的建议。 – Darthtong 2013-05-10 15:12:29