2012-03-01 37 views
0

我有一个中继器,并使用枚举的 值设置了html复选框控件的值,编码一个幻数。当我尝试 访问中继器的ItemCreated事件处理程序 中的html复选框控件时,该值为空字符串。为什么会这样,我该如何解决它?中继器(ASP.NET Web窗体)中使用枚举的复选框的值为空

C#代码

protected void Repeater1_ItemCreated(object sender, RepeaterItemEventArgs e) 
{ 
    var myObject = e.Item.DataItem as MyObject; 
    if (myObject != null) 
    { 
     var checkBox = e.Item.FindControl("checkbox1") as HtmlInputCheckBox   

     // The value is empty! 
     var value = checkBox.Value; 
    } 
} 

不工作

<asp:Repeater ID="Repeater1" OnItemCreated="Repeater1_ItemCreated" runat="server"> 
    <ItemTemplate>  
     <input type="checkbox" id="checkbox1" value='<%# SomeEnum.Value %>' /> 
    </ItemTemplate> 
</asp:Repeater> 

工作

<asp:Repeater ID="Repeater1" OnItemCreated="Repeater1_ItemCreated" runat="server"> 
    <ItemTemplate>  
     <input type="checkbox" id="checkbox1" value="1" /> 
    </ItemTemplate> 
</asp:Repeater> 
+1

尝试攻入OnItemDataBound。 – Malk 2012-03-01 22:12:32

+0

这是解决方案。感谢Adam!发生了什么事是我选择了ItemCreated而不是ItemDataBound(它们在intellisense中彼此紧挨着)。我有一种预感,它与控制系统的生命周期有关,但我没有看到我接错了事件!非常感谢! – Halcyon 2012-03-01 22:18:55

回答

1

ItemCreatedItemDataBound之前,也对每一个回传被触发,重现他控制,即使Repater不数据绑定再次。所以我不会使用ItemCreated,如果您需要访问Repeater之类的任何databound WebControlDataSource

除此之外,使复选框runat=server(或使用ASP.NET CheckBox)如果你想find在服务器上。