首页 > 解决方案 > 如何使用 FOR 循环检索 ID 并设置 CSS 规则?

问题描述

我是 ASP.NET 的新手,我尝试基于 VB 代码创建一个网页,以在前端设置其行为。现在我有了 asp Panel 标签列表,每个标签都有自己的 ID,并且遵循数字序列。我想要做的是用 FOR 循环检索其中一些 ID 以将它们设置为 CSS 类。我以为这会很容易,但这是多么大的错误!

好吧,像这样的直接调用myPanel7.CssClass = "green"有效。这就是为什么我天真地认为像这样的简单代码可能有效,但事实并非如此。

For i=1 to x
  xID = “myPanel” & i.ToString()
  xID.CssClass = "green"
Next

因此,我阅读了一些博客和 MS 文档,我了解到有必要创建一个对象来继承这些属性,例如 ID 和 CSS。我试过这段代码,它可以工作。

Dim xPanel As Panel
xID = "myPanel7"
xPanel = DirectCast(Page.FindControl(xID), Panel)
xPanel.CssClass = "green"

但是当我尝试将它应用于 FOR 循环时,它没有。

我该如何解决这个问题?,我需要获取这些 ID 并应用一个或另一个 CSS 规则。有人可以请解释我做错了什么吗?为什么这样的事情不起作用?

xID = "myPanel" & i.ToString()

好吧,我把我正在做的代码的结构留给你。非常感谢您的帮助。

默认.aspx

<asp:Panel ID="Container" CssClass="frm" runat="server">
   <asp:Panel ID="Content" CssClass="txt" runat="server">
        <asp:Panel ID="myPanel1" CssClass="white" runat="server"></asp:Panel>
        <asp:Panel ID="myPanel2" CssClass="white" runat="server"></asp:Panel>
        <asp:Panel ID="myPanel3" CssClass="white" runat="server"></asp:Panel>
        <asp:Panel ID="myPanel4" CssClass="white" runat="server"></asp:Panel>
        . . .
   </asp:Panel>
</asp:Panel>

默认.aspx.vb

Partial Class _Default
    Inherits System.Web.UI.Page

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
      Dim xID As String
      Dim xPanel As Panel

      For i As Integer = 1 to xVar
         xID = "myPanel" & i.ToString()
         xPanel = DirectCast(Page.FindControl(xID), Panel)
         xPanel.CssClass = "green"
      Next
    End Sub
End Class

标签: asp.netvb.net

解决方案


我的猜测是您正在使用母版页。

因此,您可以在父容器中使用 FindControl,例如Container

xPanel = DirectCast(Container.FindControl(xID), Panel)

ContentPlaceHolder或者在包含控件的页面上使用 FindControl并首先找到

Dim cph = CType(Master.FindControl("ContentPlaceHolder1"), ContentPlaceHolder)

然后在循环中

xPanel = DirectCast(cph.FindControl(xID), Panel)

推荐阅读