【问题标题】:Looking to delete dynamiclly created labels on postback in vb asp.net希望在 vb asp.net 中删除回发时动态创建的标签
【发布时间】:2011-09-29 18:42:51
【问题描述】:

我有一个表单,其中包含一组基于从数据库中搜索而动态创建的不同大小的标签。我遇到的问题是,当用户搜索不同的术语时,看起来有些标签没有获得新值。这是我添加标签的代码:

If rdr.HasRows Then
        ReDim Preserve entities(cnt)
        While rdr.Read()
            entities(cnt) = New Label()
            If getNodeType(txtSearch.Text) = "command" Then
                entities(cnt).Text = rdr("name").ToString
            Else
                entities(cnt).Text = rdr("command").ToString
            End If
            entities(cnt).ID = "entity" & cnt
            Panel1.Controls.Add(entities(cnt))
            place_label(entities(cnt), cnt)
            cnt += 1
            ReDim Preserve entities(cnt)
        End While
    End If

我已经尝试循环遍历 panel1 中的控件,以处理 page_load 和 page_init 子程序中的任何仍然存在的内容,但都没有效果。我不知道这是否可能与回发后具有相同 ID 的控件有关。

任何帮助将不胜感激。

【问题讨论】:

  • 由于我还没有足够的分数来回答,这是我的解决方案:当我创建动态标签时,我需要禁用 viewState。

标签: asp.net vb.net dynamic postback


【解决方案1】:

你需要这样做:

Me.Controls.Remove(controlName)

【讨论】:

  • 我会在哪里做这个,和我在 page_load / page_init 中尝试的有什么不同?
  • 您可能会遍历页面上的所有控件,例如 page_load,并删除所有作为标签的控件。
  • 刚刚在 page_load 中尝试过,没有任何变化。 For i = 0 To Panel1.Controls.Count - 1 Me.Controls.Remove(Panel1.Controls(i)) 下一个
  • 当执行 For i = 0 To Panel1.Controls.Count - 1 检查 Panel1.Controls(i) 是否为标签。如果是这样,看看你是否可以说在它上面设置背景颜色或其他东西,看看页面是否已经完全呈现,如果它更新了它。如果是这样,那么,我会说你有一个有效的参考。然后,删除添加该背景颜色,如果标签,并调用 Me.Controls.Remove(ctrlName)。如果没有更多代码,很难知道还有哪些其他因素会影响您动态生成的标签。但总的来说,当你调用 Panel1.Controls.Add 时,调用 Remove 函数应该将其删除。
  • 看起来控件不在 page_load 上的 Panel1.Controls 集合中。在 if 语句中设置断点永远不会中断。至于其他代码,就放置它们而言就是这样。我在那个子中唯一的另一件事是数据库连接/阅读器的东西。 place_label() 子只是设置了一些 CSS 样式来显示它们。
【解决方案2】:

知道了。创建动态标签时,我需要禁用标签的 viewState。

locLabel.EnableViewState = False

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-19
    • 1970-01-01
    • 2015-03-25
    • 1970-01-01
    • 2022-01-19
    • 1970-01-01
    • 2017-07-28
    • 2016-10-15
    相关资源
    最近更新 更多