【发布时间】:2011-09-20 16:52:05
【问题描述】:
我有一个动态网页,可以多次加载用户控件,包括根据需要多次加载用户控件。用户控件中有四个控件:Title Label、Repeater、Placeholder,Repeater 中有一个 AjaxControlToolkit Rating 控件。
结构可能如下所示:
Webpage
Placeholder
UserControl (repeater hidden, no data)
Placeholder - [UserControl]
UserControl
Repeater
RepeaterItem - [RatingControl]
RepeaterItem - [RatingControl]
Placeholder - [UserControl]
UserControl (placeholder hidden, no data)
Repeater
RepeaterItem - [RatingControl]
RepeaterItem - [RatingControl]
UserControl
Repeater
RepeaterItem - [RatingControl]
RepeaterItem - [RatingControl]
Placeholder - [UserControl]
UserControl (placeholder hidden, no data)
Repeater
RepeaterItem - [RatingControl]
这是我的递归方法:
Protected Sub Get_Ratings(ByVal ctl As Control, ByVal grouptotal As Integer)
If TypeOf ctl Is PerformanceEvaluationSubcontractorControl Then
Dim pesctl As Control
For Each pesctl In ctl.Controls
If TypeOf pesctl Is PerformanceEvaluationSubcontractorControl Then
Me.Get_Ratings(pesctl, grouptotal)
ElseIf pesctl.Controls.Count > 0 Then
Dim spesctl As Control
For Each spesctl In pesctl.Controls
If TypeOf spesctl Is Repeater Then
Dim rptctl As Control
For Each rptctl In spesctl.Controls
Me.Get_Ratings(pesctl, grouptotal)
Next
End If
If TypeOf spesctl Is PlaceHolder Then
Dim plhctl As Control
For Each plhctl In spesctl.Controls
Me.Get_Ratings(plhctl, grouptotal)
Next
End If
Next
ElseIf TypeOf pesctl Is AjaxControlToolkit.Rating Then
Dim ajrating As AjaxControlToolkit.Rating = pesctl
grouptotal = grouptotal + ajrating.CurrentRating
End If
Next
ElseIf ctl.Controls.Count > 0 Then
Dim sctl As Control
For Each sctl In ctl.Controls
Me.Get_Ratings(sctl, grouptotal)
Next
End If
End Sub
我的问题是,我如何有效地循环通过这种类型的结构来找到评级控制?
【问题讨论】:
-
是的,这就是我想要的,但我无法弄清楚它的逻辑。
-
我尝试了递归,但由于某种原因,中继器项目似乎在混乱中丢失了。
-
您可能还有其他问题,但可以肯定的是,您在中继器控件循环内对 Get_Rating 的调用中使用了错误的变量。您应该传递“rptctl”,但您传递的是“pesctl”(我认为是复制粘贴错误)。
-
是的,我知道我的问题大声笑,无论如何,我注意到你所说的关于 rptctl 的说法,是有道理的。该方法的开头也是错误的,因为它依赖于 ctl 作为用户控件或传递的 ctl 的计数大于 0。我对此感到非常困惑
标签: asp.net vb.net loops user-controls repeater