在Web用户控件上循环控制

时间:2013-02-13 19:00:20

标签: asp.net vb.net sitecore

我在循环访问用户控件上的控件时出现问题。

我已尝试过以下代码,但无法找到用户控件上的复选框。 (你可以看到我之前尝试过的一些尝试。)

    'For Each Ctrl As Control In Page.Controls
    'For Each Ctrl As Control In Me.Page.Controls
    'For Each ctrl As Control In Request.Form
     '''Dim frm As Control = Me.FindControl("frmDefault")
     '''For Each Ctrl As Control In frm.Controls

    Dim Check As CheckBox

    For Each Ctrl As Control In Me.Controls
        If TypeOf Ctrl Is CheckBox Then
            Check = Ctrl
            ' Do something here...
        End If
    Next

用户控件上有多个chekcbox。上面显示的代码位于用户控件的代码隐藏页面上。

(用户控件与我的CMS,Sitecore一起使用。我不确定这是否对我遇到的问题有任何影响。)

有什么建议吗?

5 个答案:

答案 0 :(得分:0)

Sitecore对于遍历控件集合没有影响,这应该是可能的。

您是否正在循环使用正确的Control-Collection?是Me.Controls你的Page-,UserControl-或RepeaterItems-Control集合(或其他集合)? 如果复选框嵌套在另一个控件中,则需要转到该控件集合。

也许您应该添加.ascx代码,以便我们可以看到您的控件集合的样子。

答案 1 :(得分:0)

这是否会显示复选框的名称?

For Each Ctrl As Control In Me.Controls
    If TypeOf Ctrl Is CheckBox Then
          MsgBox(Ctrl.Name)
    End If
Next

如果您打算复选框,应该会通知您。如果没有rexamine你的页面设计。

我相信你应该没有问题分配ctrl来检查,它应该充当指向ctrl的指针。如果页面上有多个复选框,请对ctrl.name执行if语句以获取正确的复选框。

答案 2 :(得分:0)

我终于弄清楚发生了什么。

我在不同的表格中有复选框。这些表包含 runat =“server”。此表位于Div标记内,该标记还包含 runat =“server”

由于这个原因,我的代码永远找不到复选框。我必须添加一个循环通过Div标签的 For Each 并找到合适的表格。然后我不得不遍历表格以找到复选框。

答案 3 :(得分:0)

您的某些控件具有控件。你的循环将忽略这些控件。我有一些扩展方法用于获取所有控件(您可以指定类型CheckBox,因此您不需要在调用代码中进行类型检查)

<Extension()> _
Public Function ChildControls(ByVal parent As Control) As List(Of Control)
    Return ChildControls(Of Control)(parent)
End Function

<Extension()> _
Public Function ChildControls(Of T As Control)(ByVal parent As Control) As List(Of T)
    Dim result As New ArrayList()
    For Each ctrl As Control In parent.Controls
        If TypeOf ctrl Is T Then result.Add(ctrl)
        result.AddRange(ChildControls(Of T)(ctrl))
    Next
    Return result.ToArray().Select(Of T)(Function(arg1) CType(arg1, T)).ToList()
End Function

答案 4 :(得分:0)

好吧,我解决了以下问题。 (C#)

 foreach (Control c in Page.Controls)
        {
            foreach (Control childc in c.Controls)
            {
                if (childc.ClientID == "menupadraolateral1")
                {
                    foreach (Control cMnuLat in childc.Controls)
                    {

                        //here you can access the controls of usercontrol                           

                    }


                }
            }
        }

其中“menupadraolateral1”是调用usercontrol时使用的ID

我希望我有所帮助