设置ID两次导致LinkBut​​ton单击事件仅在两次单击后触发

时间:2013-10-15 01:51:45

标签: asp.net vb.net

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

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

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

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

CODE

这发生在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

1 个答案:

答案 0 :(得分:0)

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

你能分享一些代码吗?

相关问题