更新面板中的动态复选框保持选中状态

本文关键字:状态 复选框 动态 更新 | 更新日期: 2023-09-27 18:26:53

在一个使用MasterPage的网站中,我有一个带有UpdatePanel的页面。其中有一个ListBox,其中包含一个用户列表。还有一个动态生成的复选框列表,应该根据选择的用户来检查不同的值。

第一次选择用户时效果很好。但是,当您选择第二个用户时,原始值仍然存在——您可以看到两个用户的复选框都已选中。

.aspx

<asp:Content ID="BodyContent" ContentPlaceHolderID="MainContent" runat="server">
    <h1>Access Database Security Controls</h1>
    <asp:UpdatePanel ID="SecurityControls" runat="server">
        <ContentTemplate>
            <asp:ListBox ID="AccessUsers" runat="server" Rows="15" SelectionMode="Single" OnSelectedIndexChanged="AccessUsers_SelectedIndexChanged" AutoPostBack="true"></asp:ListBox>
            <asp:PlaceHolder ID="SecurityRoles" runat="server"></asp:PlaceHolder>
        </ContentTemplate>
    </asp:UpdatePanel>
</asp:Content>

代码隐藏

    protected void Page_Load(object sender, EventArgs e)
    {
        LoadAllRoles();
    }
    protected void LoadAllRoles()
    {
        for (int i = 0; i < 4; i++)
        {
            Label lbl = new Label();
            lbl.ID = "lbl_" + i.ToString();
            lbl.Text = i.ToString() + " lbl text here";
            SecurityRoles.Controls.Add(lbl);
            CheckBox cb = new CheckBox();
            cb.ID = "cb_" + i.ToString();
            SecurityRoles.Controls.Add(cb);
            SecurityRoles.Controls.Add(new LiteralControl("<br />"));
        }
    }
    protected void AccessUsers_SelectedIndexChanged(object sender, EventArgs e)
    {
        Control page = Page.Master.FindControl("MainContent");
        Control up = page.FindControl("SecurityControls");
        Control ph = up.FindControl("SecurityRoles");
        CheckBox cbRole = (CheckBox)ph.FindControl("cb_" + AccessUsers.SelectedValue);
        if (cbRole != null)
            cbRole.Checked = true;
    }

我在创建checkboxs时尝试过执行cb.Checked = false;,但即使在部分回发时,SecurityRoles占位符控件也开始为空。

如何清除复选框?

更新面板中的动态复选框保持选中状态

您可以先取消选中所有其他复选框,然后再选中其中一个。

foreach (Control c in ph.Controls)
{
    if(c is CheckBox)
    {
          ((CheckBox)c).Checked=false;
    } 
}