以编程方式创建的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));
}
}
没有找到相关结果
已邀请:
2 个回复
古擅坛犯
倪蕊悲潍