0

我在循环访问用户控件上的控件时遇到问题。

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

    '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

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

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

有什么建议么?

4

5 回答 5

0

Sitecore has no effect on walking through the control-collection, this should be possible.

Are you looping through the right Control-Collection? Is Me.Controls your Page-, UserControl- or RepeaterItems-Control collection (or another collection)? If the checkboxes are nested in another control, you need to walk to that control-collection.

Maybe you should add your .ascx code so we can see what your control-collection looks like.

于 2013-02-13T19:41:58.500 回答
0

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

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

因此,我的代码永远找不到复选框。我必须添加一个循环遍历 Div 标签并找到适当表的For Each 。然后我必须遍历表格才能找到复选框。

于 2013-02-13T19:59:15.843 回答
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
于 2013-02-13T20:41:22.503 回答
0

这会显示复选框的名称吗?

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

这应该让你知道你是否点击了复选框。如果不重新检查您的页面设计。

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

于 2013-02-13T19:45:34.877 回答
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”是调用用户控件时使用的 ID

我希望我有帮助

于 2016-11-18T02:54:17.190 回答