C# 复选框列表+;获取id';这是所有复选框中的一个

C# 复选框列表+;获取id';这是所有复选框中的一个,c#,asp.net,mootools,C#,Asp.net,Mootools,如何获取复选框列表生成的所有复选框的id,并将datatable作为其数据源 我想我必须使用复选框列表中的“OnDataBinding”事件,但我看不出这对我有什么帮助 我用的是C# 我认为不可能获得由复选框列表生成的所有复选框的id,因此我认为采用moo工具的方式是正确的 有什么想法吗 谢谢您使用的是VB还是C?…请相应地标记 您可以将列表或字符串命名为strchklist VB.NET For Each li In CheckBoxList1.Items If li.Sele

如何获取复选框列表生成的所有复选框的id,并将datatable作为其数据源

我想我必须使用复选框列表中的“OnDataBinding”事件,但我看不出这对我有什么帮助

我用的是C#

我认为不可能获得由复选框列表生成的所有复选框的id,因此我认为采用moo工具的方式是正确的

有什么想法吗

谢谢

您使用的是VB还是C?…请相应地标记

您可以将列表或字符串命名为
strchklist

VB.NET

For Each li In CheckBoxList1.Items 
       If li.Selected Then 
            strchklist += li.Id 
      End If 
  Next 
C#

实际上不是控件本身,因此没有ID。如果要在客户端脚本中访问它,请添加一个新属性,您可以引用。(是的,在OnDataBinding期间)请记住,这些不会在ViewState中持久化


你到底想完成什么?可能有助于详细说明。

完全不同的答案

复选框列表有点奇怪。。。与其他控件不同,它实际上没有到明显HTML构造的逻辑映射。它实际上使用派生ID呈现多个复选框。这些ID似乎是作为CheckBoxList.ClientID生成的

您可以通过查看页面源代码来验证这一点。在内部,单个checkbox控件的ID似乎只是它的索引,然后它将使用CheckBoxList作为其NamingContainer呈现。您可以使用Reflector查看CheckBoxList控件如何呈现输出


仍然是jQuery的好去处。现在你知道ID就更容易了。

我今天早上醒来,想到要这么做(CBLUSEQUITES是一个复选框列表)

这会将警报添加到复选框列表生成的表中。需要注意的是,如果单击复选框的文本,警报将显示两次,如果单击复选框,警报将显示一次。我想这个解决方案对我会有用的

顺便说一句,我从来没有想过上面的代码会工作

p.S回答我自己的问题,因为我想写一些代码,但我不能使用注释框


本着StackOverFlow的精神,我得出了一个在我的场景中有效的结论,但是问题的描述是不同的?我该怎么办?编辑问题并将其标记为答案?

我可以使用mootools完成这项工作,下面是代码

function ToggleSelection(ctrl, sender)
{
    var cblCtrl = $(ctrl);
    var Allcbs = cblCtrl.getElements('input');

    for(var i=0; i<Allcbs.length; i++)
        Allcbs[i].checked = sender.checked;
}

function ToggleSelectAll(ctrl, sender)
{
    var AllTrueCount = 0;
    var cblCtrl = $(ctrl);
    var Allcbs = sender.getElements('input');

    for(var i=0; i<Allcbs.length; i++)
        if(Allcbs[i].checked)
            AllTrueCount++;

    if(AllTrueCount == Allcbs.length)
        cblCtrl.checked = true;
    else
        cblCtrl.checked = false;
}
事实证明,我不需要知道复选框列表生成的所有复选框的id。通过这行代码,我可以将onclick javascript添加到这些复选框中

cblUSEquities.Attributes.Add("onclick", string.Format("javascript:ToggleSelectAll('{0}', this);", chkAllUSEquities.ClientID));

这将把onclick事件添加到复选框列表生成的表中。

理想情况下,您只需要将click事件处理程序附加到domReady事件中的所有复选框列表中,这将使用MooTools创建一个简单得多的函数。但是,如果您愿意,您可以保持代码的原样,只需将这两个函数简化一点即可

function ToggleSelection(ctrl, sender) {
  var checkboxes = $(ctrl).getElements('input[type=checkbox]');
  checkboxes.set('checked', sender.checked);
}

function ToggleSelectAll(ctrl, sender) {
  var fAllChecked = ($(sender).getElements('input:checked').length == $(sender).getElements('input[type=checkbox]').length)
  $(ctrl).set('checked', fAllChecked);
}

您可以一次设置整个元素数组的属性,而不需要遍历它们。在第二个函数中,我将根据复选框总数检查选中的元素数,如果它们匹配,则表示它们都已选中。

很抱歉,由于ListItem没有“ID”属性,因此忘记标记无法工作的语言。我还尝试了li.Attributes[“id”]并返回null。我有一个复选框列表和一个单独的复选框(全选复选框)。因此,当选中带有全选的复选框时,我需要选中复选框列表生成的所有复选框,反之亦然。因此,当复选框列表生成的复选框取消选中时,如果选中,我需要取消选中全选复选框。所以我想我需要知道复选框列表生成的复选框,这样我就可以添加脚本来选中或取消选中全选复选框。。。我希望我很清楚,如果您想在客户端使用jQuery,那么这是一个使用jQuery的好地方。另外,我将为您发布一个备选答案。是的,使用JQuery将使其变得非常简单。然而,我正在为CMS解决方案(kentico)构建一个web部件,它与moo工具一起提供,并且与JQuery冲突。嗨,Bryan,我听到了你的话,我不知道为什么我没有想到在“moo工具”中编写它。我想这是因为我记得在试图确定jquery为什么不工作时是多么沮丧。所以我让它工作了,但我不需要知道复选框列表生成的所有复选框的id。这肯定更好。谢谢
//Binding event to the checkbox list
cblUSEquities.Attributes.Add("onclick", string.Format("javascript:ToggleSelectAll('{0}', this);", chkAllUSEquities.ClientID));

//binding event to the select all checkbox
chkAllUSEquities.Attributes.Add("onclick", string.Format("javascript:ToggleSelection('{0}', this);", cblUSEquities.ClientID));
cblUSEquities.Attributes.Add("onclick", string.Format("javascript:ToggleSelectAll('{0}', this);", chkAllUSEquities.ClientID));
function ToggleSelection(ctrl, sender) {
  var checkboxes = $(ctrl).getElements('input[type=checkbox]');
  checkboxes.set('checked', sender.checked);
}

function ToggleSelectAll(ctrl, sender) {
  var fAllChecked = ($(sender).getElements('input:checked').length == $(sender).getElements('input[type=checkbox]').length)
  $(ctrl).set('checked', fAllChecked);
}