以编程方式创建的CheckBoxList在“未选中”时不触发

问题描述

| 我正在使用ASP.NET和C#。我正在以编程方式创建一个复选框列表。当我检查一项时,SelectedindexChanged事件正在触发。但是,当我取消选中该项目时,不会触发该事件。我在每次回发中绑定项目,并且自动回发设置为true。我要去哪里错了?这是代码-
page_load
{

    var cblUser = new CheckBoxList();
    cblUser.AutopostBack = true;
    cblUser.SelectedindexChanged += cblUser_SelectedindexChanged;

    var list = DAL.GetUsers();
    foreach (var user in list)
    {
        cblUser.Items.Add(new ListItem(user.Name,user.Id));
    }
}
谢谢。 更新#1:实际代码-
public partial class CategoriesAccordion : UserControl
    {
        public List<Community> AllCommunities
        {
            get
            {
                if (Session[\"AllCommunities\"] == null)
                {
                    var db = new CommunityGuideDB();
                    Session[\"AllCommunities\"] = db.Communities.OrderBy(x => x.Name).ToList();
                }
                return (List<Community>) Session[\"AllCommunities\"];
            }
        }

        public List<Category> Categories
        {
            get
            {
                if (Session[\"Categories\"] == null)
                {
                    var db = new CommunityGuideDB();
                    Session[\"Categories\"] = db.Categories.OrderBy(x => x.Name).ToList();
                }
                return (List<Category>) Session[\"Categories\"];
            }
        }

        public event EventHandler Categories_Selected = delegate { };

        protected void Page_Load(object sender,EventArgs e)
        {
            if (!IsPostBack) Session.Remove(\"Categories\");
            LoadCategories();
        }

        private void LoadCategories()
        {
            foreach (var parent in Categories.Where(item => item.ParentId == null && item.Showaspivot == true).OrderBy(x => x.displayOrder))
            {
                var pane = new AccordionPane {ID = parent.Name};
                pane.HeaderContainer.Controls.Add(new LiteralControl(parent.Name));

                var cblValues = new CheckBoxList();
                cblValues.AutopostBack = true;
                cblValues.SelectedindexChanged += cblValues_SelectedindexChanged;
                foreach (var child in Categories.Where(child => child.ParentId == parent.Id))
                {
                    var communityCount = child.CommunityCategory.Where(x => x.Categories_Id == child.Id).Count();
                    cblValues.Items.Add(new ListItem(string.Format(\"{0} ({1})\",child.Name,communityCount),child.Id.ToString()));
                }

                pane.ContentContainer.Controls.Add(cblValues);
                acdFilters.Panes.Add(pane);
            }
        }

        protected void cblValues_SelectedindexChanged(object sender,EventArgs e)
        {
            var cblValues = ((CheckBoxList) sender);
            var selectedCategories = (from ListItem item in cblValues.Items where item.Selected select Categories.Find(c => c.Id == new Guid(item.Value))).ToList();
            Categories_Selected(this,new CommandEventArgs(\"SelectedCategories\",selectedCategories));
        }
    }
    

解决方法

我不知道如何将控件添加到容器中? 我刚刚检查了一下,并且在检查和取消检查时都触发了该事件。
public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender,EventArgs e)
    {
        CheckBoxList cbList = new CheckBoxList();
        cbList.AutoPostBack = true;
        for (int i = 0; i < 10; i++)            
            cbList.Items.Add(i.ToString());
        cbList.SelectedIndexChanged += new EventHandler(cbList_SelectedIndexChanged);
        form1.Controls.Add(cbList);
    }

    void cbList_SelectedIndexChanged(object sender,EventArgs e)
    {
        //fires both on check & uncheck of an item
    }
}
    ,在列表中选择其他项目时会触发您绑定的SelectedIndexChanged事件,而不是在检查项目时触发。 CheckBoxList没有用于更改其项目状态的事件。 尝试使用像Repeater这样的列表控件...     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...