我在循环访问用户控件上的控件时出现问题。
我已尝试过以下代码,但无法找到用户控件上的复选框。 (你可以看到我之前尝试过的一些尝试。)
'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一起使用。我不确定这是否对我遇到的问题有任何影响。)
有什么建议吗?
答案 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
我希望我有所帮助