这个问题可以通过保存选定状态并在PostBack后重新加载该状态来解决。 以下是实现此解决方案的示例代码:
首先,首先创建一个名为CheckedListItem的自定义控件,该控件表示CheckBoxList的每个项。该控件包括一个CheckBox和一个HiddenField,用于将其选中状态传递到服务器并在PostBack后重新加载状态。
public class CheckedListItem : System.Web.UI.WebControls.WebControl { private System.Web.UI.WebControls.CheckBox _checkBox; private System.Web.UI.WebControls.HiddenField _hiddenField;
public CheckedListItem()
{
_checkBox = new System.Web.UI.WebControls.CheckBox();
_hiddenField = new System.Web.UI.WebControls.HiddenField();
Controls.Add(_checkBox);
Controls.Add(_hiddenField);
}
public bool Checked
{
get { return _checkBox.Checked; }
set { _checkBox.Checked = value; }
}
public string Value
{
get { return _hiddenField.Value; }
set { _hiddenField.Value = value; }
}
}
然后,创建一个名为CheckedList的自定义服务器控件,该控件表示多个CheckedListItem控件。该控件还包括一个名为CheckedValues的属性,用于在PostBack后保存选定状态。
public class CheckedList : System.Web.UI.WebControls.WebControl, System.Web.UI.INamingContainer
{
private List
public CheckedList()
{
}
protected override void CreateChildControls()
{
Controls.Clear();
foreach (var item in Items)
{
Controls.Add(item);
}
}
public List Items
{
get { return _items; }
set { _items = value; }
}
public IEnumerable CheckedValues
{
get
{
EnsureChildControls();
return Items.Where(x => x.Checked).Select(x => x.Value);
}
set
{
EnsureChildControls();
foreach (CheckedListItem item in Items)
{