ASP.隐藏CheckBoxList控件中的复选框项



我有一个数据绑定的CheckBoxList控件,它可以变得相当大,所以我试图为它创建一个过滤器。下面是我正在做的:

foreach( ListItem item in this.UserRolesList.Items ) {
    if( !item.Value.StartsWith( this.RolesFilterList.SelectedValue ) ) {
        item.Attributes.CssStyle["display"] = "none";
    } else item.Attributes.CssStyle["display"] = "inline";
}

这通常有效,除了当ASP。NET呈现CheckBoxList,它使用一个表,每个CheckBox控件嵌套在自己的<TR>元素中。这意味着,即使我不希望看到的项目没有显示,但它们行的空白空间却显示了,因此我仍然需要满足相当多的空白空间。

我不知道我可以访问<TR>元素没有子类化的控制,这是一个"很好有"的功能,我没有时间去做,所以我想知道是否有一个CSS技巧,我可以用来访问元素的父的父(例如,<input type="checkbox"/> -> <td> -> <tr>)。我以前使用过:first-child伪元素,但是我对这种技巧的网络搜索没有结果,所以我有我的怀疑。不过问问也无妨,对吧?

这可能适合您。它从列表中完全移除项目,这样它就不会被呈现:

string value = this.RolesFilterList.SelectedValue;
int count = this.UserRolesList.Items.Count - 1;
for(var i=count;i>=0;i--)
{
    ListItem item = this.UserRolesList.Items[i];
    if (!item.Value.StartsWith(value))
    {
        this.UserRolesList.Items.RemoveAt(i);
    }
}

根据你上面关于如何从用户的角度来操作的评论,你可能最好在javascript中完成所有客户端操作,而不是以这种方式在回发上完成。

在jQuery中,您可以创建一个在选择列表更改时运行的函数,然后查找UserRolesList表中的所有复选框,然后循环它们,并根据它们的值使用.closest('tr')函数来隐藏/显示包含它们的整个表行

最新更新