2011-07-29 14 views
0

私はページロード時にいくつかの動的コントロールを作成し、動的リンクボタンのクリックイベントを処理するイベントハンドラを追加しました。クリックイベントハンドラのサブコントロール内で、ページ上の他の(非動的な)コントロールを参照し、その値を変更する必要があります。しかし、null参照例外(オブジェクトのインスタンスに設定されていないオブジェクト)が、ページ(この場合はlabel1)上のコントロールを参照しようとするたびに取得されます。これらの動的コントロールの作成やイベントハンドラの作成で何が間違っていますか?ありがとう!あなたのページの外とEbayItemNotesクラス内でこのイベントを処理している。このライン動的コントロールのイベントハンドラでのAsp.Net Null参照の例外

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

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 

答えて

0

、どのようにこのクラスは、ページ内に存在するのLabel1の何を知っていますか?

それは..あなたが同様にあなたのラベルを渡す必要があるということでした

Dim oNotes As EbayItemNotes = new EbayItemNotes(label1) 
EbayItemNotesコンストラクタ内部

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

ちょうどそれを考え出した...それが問題でした。ありがとう! – Tyler