我有两个CheckBoxLists,我需要能够设置在一个CheckBoxList中选择的ListItem,具体取决于在另一个CheckBoxList中选择的项目。
我如何知道CheckBoxList中的哪个ListItem发出了回发?该方法必须在服务器上运行。
解决方案更新:
我使用的最终解决方案(感谢Four):
protected void CheckBoxList1_SelectedIndexChanged(object sender, EventArgs e)
{
var selectedItem = CheckBoxList1.SelectedItem;
}
其中selectedItem是单击的ListItem。
答案 0 :(得分:2)
将AutoPostBack属性设置为True,然后在服务器上进行创建和更改:How to use AutoPostBack feature in CheckBoxList
<asp:CheckBoxList
ID="CheckBoxList1"
runat="server"
AutoPostBack="true"
OnSelectedIndexChanged="CheckBoxList1_SelectedIndexChnaged"
>
要查看哪些ListItem已被检查,您可以按如下方式遍历CheckBoxList:
protected void CheckBoxList1_SelectedIndexChnaged(object sender, System.EventArgs e)
{
Label1.Text = "You Selected:<br /><i>";
foreach (ListItem li in CheckBoxList1.Items)
{
if (li.Selected == true)
{
Label1.Text += li.Text + "<br />";
}
}
Label1.Text += "</i>";
}
要获取已检查的ListItem的值而不迭代所有ListItem,您可以执行以下操作:
protected void CheckBoxList1_SelectedIndexChanged(object sender, EventArgs e)
{
CheckBoxList list = (CheckBoxList)sender;
string[] control = Request.Form.Get("__EVENTTARGET").Split('$');
int index = control.Length - 1;
ListItem li = (ListItem)list.Items[Int32.Parse(control[index])];
}
此时您将拥有已检查的实际ListItem,无论您喜欢什么,都可以使用它。
答案 1 :(得分:1)
更简单:
var selectedItem = CheckBoxList1.SelectedItem;