【发布时间】:2009-12-19 19:12:23
【问题描述】:
我的页面中有一个复选框列表,它的数据源在 PreLoad() 事件中以编程方式设置:
protected void Page_PreLoad()
{
if (!Page.IsPostBack)
{
CheckBoxList1.DataSource = NoK.AcceptedNoks((Guid)Membership.GetUser().ProviderUserKey);
CheckBoxList1.DataTextField = "FullName";
CheckBoxList1.DataValueField = "NoKId";
CheckBoxList1.DataBind();
}
foreach (ListItem chk in CheckBoxList1.Items)
{
if (PrivateMessage.HasAccess(Request.QueryString["MessageId"], chk.Value))
{
chk.Selected = true;
}
}
}
正如您在 foreach 中看到的,将检查是否必须检查项目。而且效果很好。这意味着最终用户可以编辑列表项,并且默认情况下某些项已被选中。现在我想通过单击按钮来获取项目:
protected void UpdateRightBtn_Click(object sender, EventArgs e)
{
var SelectedNokIds =
CheckBoxList1.Items
.OfType<ListItem>()
.Where(li =>
li.Selected == true)
.Select(l => new Guid(l.Value));
}
但SelectedNokIds 中的项目仍然是旧项目,如果用户更改复选框,SelectedNokIds 中的任何效果都不会出现。 为什么???
请帮忙!
【问题讨论】:
标签: c# asp.net datasource checkboxlist listitem