ASP.NET中如何通过FOR循环获取Panel控件ID并设置CSS规则
问题原因
- 拼接ID字符串直接操作属性失效的原因:你拼接得到的
xID是字符串类型,本质只是一段文本,并非Panel控件实例,本身没有CssClass属性,自然无法直接调用生效。 - 循环中
Page.FindControl不生效的原因:FindControl方法默认仅能查找当前容器的直接子控件,你的所有myPanel*控件都嵌套在ID为Content的Panel内部,不属于Page根级的直接子控件,因此Page.FindControl(xID)会返回空值,后续的属性操作会触发空引用错误导致失效。
修复方案
你只需要将查找控件的根节点从Page改为父容器Content即可,同时建议增加空值判断避免因ID不存在导致报错:
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim xID As String Dim xPanel As Panel ' 先获取外层的Content容器控件 Dim parentContainer As Panel = DirectCast(Page.FindControl("Content"), Panel) For i As Integer = 1 To xVar xID = "myPanel" & i.ToString() ' 从Content容器下查找目标Panel xPanel = DirectCast(parentContainer.FindControl(xID), Panel) ' 空值判断避免报错 If xPanel IsNot Nothing Then xPanel.CssClass = "green" End If Next End Sub
如果你不想严格依赖数字序列的ID规则,也可以直接遍历Content下的所有控件匹配前缀,代码更简洁:
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click For Each ctl As Control In Content.Controls If TypeOf ctl Is Panel AndAlso ctl.ID.StartsWith("myPanel") Then DirectCast(ctl, Panel).CssClass = "green" End If Next End Sub
内容的提问来源于stack exchange,提问作者Gilbert
相关产品推荐
相关产品推荐

