1

我有一种情况,我基本上是在 PageInit 上没有设置任何属性的情况下动态创建 LinkBut​​tons,然后在另一个单独的按钮的单击事件上添加有关这些 LinkBut​​tons 的属性。(即文本,添加单击事件处理程序等)。

问题是,我必须单击 LinkBut​​ton两次才能触发 click 事件处理程序。请记住,所有这些都在更新面板中。

在上下查看之后,我意识到我将它的 ID 设置为相同的东西两次(在 PageInit 以及后来设置属性时)。我看到了这一点,并认为它会弄乱控制层次结构中的东西,我理解这是问题所在……但我不完全理解的是为什么

有人可以向我解释一下必须单击 LinkBut​​ton 两次的技术原因是什么,以及为什么将 ID 设置为相同的东西两次会导致这种情况?

代码

这发生在 CreateChildControls()

Private Sub InitializeLinkBreadCrumbPlaceHolders()
  Dim counter As Integer = 0

  'Adding the handlers has to take place before/on Page.Init...
  For counter = 0 To LEVEL_CAP
      _linkDynamic = New LinkButton()
      'Add all the links
      Me._placeHolder.Controls.Add(_linkDynamic)
      With _linkDynamic
          AddHandler .Click, AddressOf Link_Click
          .Style.Add("display", "none")
          .ID = String.Format("lbl{0}", counter)
      End With
  Next
End Sub

当按下常规按钮时会发生这种情况(请记住,所有这些都在更新面板内)

Private Sub SetHyperLinkBreadCrumbValues(Optional ByVal ShouldAddAsLink As Boolean = True)

    'Don't add a new link if we went backwards
    If ShouldAddAsLink Then
        Me.Links(Me.CurrentLevel) = Me.LinkHeader
    End If

    'Go through the collection to set the values of the existing linkbuttons
    For Each element As DictionaryEntry In Me.Links
        'Links 1-based index
        With CType(Me._placeHolder.Controls.Item(CInt(element.Key) - 1), LinkButton)
            .Font.Name = "Arial"
            .Font.Size = 11
            If CInt(element.Key) > 1 Then
                .Text = String.Format(" > {0}", CStr(element.Value))
            Else
                .Text = CStr(element.Value)
            End If
            .Visible = True
            .Style.Add("display", "inline")
        End With

        Me.TrimDescriptionLink(CType(Me._placeHolder.Controls.Item(CInt(element.Key) - 1), LinkButton))
    Next
End Sub
4

1 回答 1

0

我不时看到(甚至导致)这种行为。不可避免地,您并不总是添加控件(或在 中连接OnClick事件PageInit。第一次单击导致 aPostBack并且在第二个服务器页面生命周期中,您在 期间添加控件PageInit。在第二次周围(和第二次按钮单击),事件已连接并触发正确的事件。您可能不是OnClick每次都连接事件PageInit吗?

你能分享一些代码吗?

于 2013-10-15T02:11:15.440 回答