开发者

Asp.Net Null Reference Exception on Event Handler for Dynamic Controls

I've created some dynamic controls on page load and added an event handler to handle the click event of a dynamic link button. Within the sub of the click event handler, I need to reference some other (non-dynamic) controls on the page and change their value. However, I get a null reference exception - object not set to an instance of an object - each time I try to reference a control on the page (in this case label1). What am I doing wrong in creating these dynamic controls or with my event handler? Thanks!

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    'Get the data to populate the controls
    Dim oMySqlData As New MySqlDataProvider
        PlaceHolder1.Controls.Add(CreateExistingNotesHTML(oMySqlData.GetParentNotes("104628"), oMySqlData.GetChildNotes("104628")))
End Sub

Public Sub OnCommentClick(ByVal sender As Object, ByV开发者_StackOverflowal e As EventArgs)
    'The event handler for the link buttons
    Label1.Text = "You clicked " & DirectCast(sender, LinkButton).ID
End Sub

Public Function CreateExistingNotesHTML(ByVal dtParent As DataTable, ByVal dtChild As DataTable) As HtmlGenericControl
    'The routine that creates the dynamic controls
    Dim divContainer As New HtmlGenericControl("div")
    For Each drParent As DataRow In dtParent.Rows()
        divContainer.Controls.Add(WriteNote(drParent.Item("NoteId").ToString(), drParent.Item("UserName").ToString(), drParent.Item("ItemNote").ToString, CDate(drParent.Item("InsertDate")), "note"))
    Next

    Return divContainer

End Function

Private Function WriteNote(ByVal NoteId As String, ByVal UserName As String, ByVal ItemNote As String, ByVal InsertDate As DateTime, ByVal DivClass As String) As HtmlGenericControl
    Dim div As New HtmlGenericControl("div")
    div.ID = "d" & NoteId
    div.Attributes.Add("class", DivClass)
div.Controls.Add(New LiteralControl(" · "))

   'Add the dynamic link buttons
    Dim lnkComment As New LinkButton
    lnkComment.ID = "l" & NoteId
    lnkComment.Text = "Comment"
    lnkComment.Style("Text-decoration") = "none"
    AddHandler lnkComment.Click, AddressOf oNotes.OnCommentClick
    div.Controls.Add(lnkComment)
 Return div
End Function


With this line

Dim oNotes As New EbayItemNotes     
AddHandler lnkComment.Click, AddressOf oNotes.OnCommentClick 

You are handling this event outside of your page and within the EbayItemNotes class, how does this class know anything of Label1 that resides in your page?

Could it be that you need to pass your label in as well..

Dim oNotes As EbayItemNotes = new EbayItemNotes(label1)

inside EbayItemNotes constructor

public sub New(lbl as Label) //store this label for use in event handler..
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜