动态控件事件处理程序的Asp.Net空引用异常

时间:2011-07-29 01:28:54

标签: asp.net vb.net

我在页面加载时创建了一些动态控件,并添加了一个事件处理程序来处理动态链接按钮的click事件。在click事件处理程序的子部分中,我需要引用页面上的一些其他(非动态)控件并更改它们的值。但是,我得到一个空引用异常 - 对象未设置为对象的实例 - 每次我尝试引用页面上的控件(在本例中为label1)。在创建这些动态控件或使用我的事件处理程序时,我做错了什么?谢谢!

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, ByVal 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

1 个答案:

答案 0 :(得分:0)

使用此行

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

您正在页面之外和EbayItemNotes课程中处理此活动,此课程如何知道您网页中的Label1的任何内容?

你是否也需要传递你的标签..

Dim oNotes As EbayItemNotes = new EbayItemNotes(label1)

在EbayItemNotes构造函数中

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