1

我究竟做错了什么?我有一个 CheckBoxList,我想一个一个地处理每个元素。我在“cbl.Items.Count”行收到错误提示该元素未使用“new”初始化。非常感谢你!

CheckBoxList cbl = (CheckBoxList)FindControl("CBL_categ");
for (int i = 0; i < cbl.Items.Count; i++)
{
    if (cbl.Items[i].Selected)
        catn = cbl.Items[i].Value;
}

编辑:

<asp:Content ID="Content4" runat="server" 
    contentplaceholderid="ContentPlaceHolder3">
    <asp:Label ID="statusLabel" runat="server" Text=""> </asp:Label>

    <asp:GridView ID="GridView1"  AutoGenerateColumns="False" runat="server" 
    DataSourceID="SqlDataSource1" Visible="False" >
        ....

    </asp:GridView>


    <br />
    Categories:<asp:CheckBoxList ID="CBL_categ" runat="server" DataTextField="name" DataValueField="name">
    </asp:CheckBoxList>

</asp:Content>
4

2 回答 2

2

造成这种情况的一个常见原因是,如果您要查找的 CheckBoxList 嵌套在某个其他容器中,FindControl 将找不到它,因为它不会递归搜索,而是返回 null。

如果它是嵌套的,最好的性能解决方案是这样的:

FindControl("nestingcontrol").FindControl("CBL_categ")

或者,编写一个在每个控件上运行 FindControl 的递归方法,但预计性能会受到影响。

参考:

http://forums.asp.net/t/1107107.aspx

于 2012-06-18T15:09:22.537 回答
0

您需要在那里进行错误检查,因为它可能返回 null。

CheckBoxList cbl = (CheckBoxList)FindControl("CBL_categ");

if (cbl != null)
{
        for (int i = 0; i < cbl.Items.Count; i++)
        {
            if (cbl.Items[i].Selected)
            {
                catn = cbl.Items[i].Value;
             }
         }
 }
于 2012-06-18T14:58:59.840 回答