【问题标题】:How to retrieve an ID with a FOR loop and set CSS rule?如何使用 FOR 循环检索 ID 并设置 CSS 规则?
【发布时间】:2021-11-08 10:35:50
【问题描述】:

我是 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()

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

Default.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>

Default.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

【问题讨论】:

  • 肯定还有别的东西(这应该可以)你确定你没有在回发时将面板重置为白色吗?在按钮单击事件中放置一个断点并确认其在页面生命周期中要调用的最后一个函数...
  • 确保为项目设置Option Strict On(并将其设置为新项目的默认值)。它会指出一些需要纠正的地方,这可能会引导您了解它为什么不起作用。

标签: asp.net vb.net


【解决方案1】:

我猜你正在使用母版页。

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

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

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

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

然后在循环中

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

【讨论】:

    猜你喜欢
    • 2021-05-28
    • 2018-02-08
    • 1970-01-01
    • 2018-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多