c#复选框无效

时间:2012-12-04 06:01:41

标签: c# asp.net checkboxlist

我是这个c#编码的新手。 我正在尝试使用复选框编写代码。以下是设计流程中的代码

<table>
    <tr>
        <td align="right">
            <asp:Label ID="lblOwn" runat="server" Text="Owned by You :"></asp:Label>
        </td>
        <td align="left">
            <asp:CheckBoxList ID="chbxOwn" runat="server"
                OnSelectedIndexChanged="onAckTypeChanged3" AutoPostBack="true">
                <asp:ListItem>2 wheeler</asp:ListItem>
                <asp:ListItem>4 wheeler</asp:ListItem>
            </asp:CheckBoxList>
        </td>
    </tr>
    <tr>
        <td align="right">
            <asp:Label ID="Label1" runat="server" Text="2 w"></asp:Label>
        </td>
    </tr>
    <tr>
        <td align="right">
            <asp:Label ID="Label2" runat="server" Text="4 w"></asp:Label>
        </td>
    </tr>
</table>

以下是代码隐藏

public partial class _Default : System.Web.UI.Page 
{
    protected void Page_Load(object sender, EventArgs e)
    {
        Hid1();
        Hid2();
    }
    protected void onAckTypeChanged3(object sender, EventArgs e)
    {
        if (chbxOwn.SelectedItem.Text == "2 wheeler")
        {
            Vis1();
        }
        if (chbxOwn.SelectedItem.Text == "4 wheeler")
        {
           Vis2();
        }
    }
    private void Hid1()
    {
        Label1.Visible = false;
    }
    private void Hid2()
    {
        Label2.Visible = false;
    }
    private void  Vis1()
    {
        Label1.Visible = true;
    }
    private void Vis2()
    {
        Label2.Visible = true;
    }
}

选中“2 wheeler”复选框时,“2 w”标签可见。但是当我检查“4轮车”时,它并没有显示两个标签。我想知道我在哪里弄错了。此外,当我取消选中两个复选框时,会生成Null引用异常。

你可以帮我解决这些问题吗? 1.选中两个复选框都应显示两个标签。 2.取消选择不应产生空引用异常。

提前致谢 问候, 阿布舍克巴克

3 个答案:

答案 0 :(得分:1)

查看ListControl有关如何使用Items属性确定CheckBoxList中所选项的示例。 SelectedItem属性返回索引最低的项。如果未选择任何项目,SelectedItem将返回null,这就是您将获得空引用异常的原因。

答案 1 :(得分:1)

这就是你想要的:

protected void onAckTypeChanged3(object sender, EventArgs e)
{
    foreach (ListItem item in chbxOwn.Items)
    {
        if (item.Text == "2 wheeler" && item.Selected)
        {
            Vis1();
        }
        if (item.Text == "4 wheeler" && item.Selected)
        {
            Vis2();
        }
    }
}

它就像一个魅力...... !!

以下是工作演示: DEMO

答案 2 :(得分:1)

修改 onAckTypeChanged3 事件,如下所示

protected void onAckTypeChanged3(object sender, EventArgs e)
        {
            foreach (ListItem checkBoxItem in chbxOwn.Items)
            {
                if (checkBoxItem.Selected == true)
                {
                    if (checkBoxItem.Text == "2 wheeler")
                    {
                        Vis1();
                    }
                    if (checkBoxItem.Text == "4 wheeler")
                    {
                        Vis2();
                    }
                }                
            }            
        }