我有一种情况,我基本上是在 PageInit 上没有设置任何属性的情况下动态创建 LinkButtons,然后在另一个单独的按钮的单击事件上添加有关这些 LinkButtons 的属性。(即文本,添加单击事件处理程序等)。
问题是,我必须单击 LinkButton两次才能触发 click 事件处理程序。请记住,所有这些都在更新面板中。
在上下查看之后,我意识到我将它的 ID 设置为相同的东西两次(在 PageInit 以及后来设置属性时)。我看到了这一点,并认为它会弄乱控制层次结构中的东西,我理解这是问题所在……但我不完全理解的是为什么。
有人可以向我解释一下必须单击 LinkButton 两次的技术原因是什么,以及为什么将 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