循环通过asp:CheckBox控件

时间:2012-04-18 15:48:18

标签: asp.net

我的页面上有11个这样的控件,都是复选框。它包含在母版页中。

我可以完成我想要的事情:

generalInformation.InputAttributes.Add( "class", "SetupChecklist" );
generalInformation2.InputAttributes.Add( "class", "SetupChecklist" );
generalInformation3.InputAttributes.Add( "class", "SetupChecklist" );

等。

我现在正试图遍历这些并做同样的事情来保存自己的一些代码,但是我在使这个工作正常工作方面遇到了很多麻烦,我根本无法让它工作。

有人能给我一个很好的方法来循环这11个复选框控件并添加css类SetupChecklist吗?

我尝试了这个并且由于某种原因它没有添加该类。

protected void InitializeCheckboxes ()
    {
        //generalInformation.InputAttributes.Add( "class", "SetupChecklist" );
        var allCheckBoxes = Page.Controls.OfType<CheckBox>();
        foreach ( var c in allCheckBoxes )
        {
            c.InputAttributes.Add( "class", "SetupChecklist" );
        } 
    }

我在Page_Load方法中调用InitializeCheckboxes();。当我只使用generalInformation.InputAttribues.Add等时,它确实有效。但是当我循环它们时它不会。有什么建议吗?

4 个答案:

答案 0 :(得分:3)

最好将它们放在Panel(呈现为div)或其他容器控件中。然后,您可以使用LINQ&#39; OfType

获取参考
// assuming all checkboxes are in a panel named "SetupContainer"
var allCheckBoxes = SetupContainer.Controls.OfType<CheckBox>();
foreach(var chb in allCheckBoxes)
    chb.InputAttributes.Add( "class", "SetupChecklist" );

当然你也可以用它来查找整个页面上的所有CheckBox,但这可能容易出错。

答案 1 :(得分:1)

未经测试但可能对您有帮助..

foreach(Control oControl in Page.Controls)
{
  if(oControl is CheckBox && ((CheckBox)oControl).ID.StartsWith("generalInformation") )
   ((CheckBox)oControl).InputAttributes.Add( "class", "SetupChecklist" );
}

答案 2 :(得分:1)

由于runat = "server",您的复选框将呈现如下所示。

<span class="SetupChecklist" class="SetupChecklist" name="generalInformation">
     <input id="generalInformation" type="checkbox" name="generalInformation" />
</span>

JQuery的

<script type="text/javascript" language="javascript" src="Scripts/jquery-1.4.1.min.js"></script>
<script type="text/javascript" language="javascript" src="Scripts/jquery-1.4.1.js"></script>
<script language="javascript" type="text/javascript">
    $(document).ready(function () {
        $(this).find("input[type='checkbox']").addClass('GuestClass');
    });
</script>

这将为您节省下列步骤的时间。

  
      
  1. 从客户转到
  2.   
  3. IIS Web服务器
  4.   
  5. ISAPI扩展
  6.   
  7. ISAPI扩展加载/执行/将aspx转换为HTML
  8.   
  9. 发送回IIS Web服务器。
  10.   
  11. IIS回复客户端
  12.   

答案 3 :(得分:0)

public void GetUserControls(ControlCollection controls)
{
    foreach (Control ctl in controls)
    {
        if (ctl is CheckBoxOrWhateverControlTypeYouWant)
        {
             /// Add attribute
        }

        if (ctl.Controls.Count > 0)
            GetUserControls(ctl.Controls);
    }
}