2016-03-22 21 views
0

ASPページが読み込まれると、SQLデータベースからオブジェクトのリストにデータを読み込み、このリストをループして動的プレースホルダ、更新パネル、テキストボックス、ボタンを作成し、メインのプレースホルダー。各updatepanelは条件付きに設定され、一意のボタンがscriptmanagerに追加されます。私は非同期トリガを動的に作成しようとしましたが、これは不可能です。私のコードは以下の通りです:動的に作成された非同期ポストバックボタンへの応答

Dim plcComments As New PlaceHolder() 
plcComments.ID = "plcComments" + Link.ID.ToString() 

Dim updComments As New UpdatePanel() 
updComments.ID = "updComments" + Link.ID.ToString() 
updComments.UpdateMode = UpdatePanelUpdateMode.Conditional 

Dim txtComment As New TextBox() 
txtComment.ID = "txtComment" + Link.ID.ToString() 
txtComment.Text = "txtComment " + Link.ID.ToString() 'Example text 
updComments.ContentTemplateContainer.Controls.Add(txtComment) 

Dim btnComment As New Button() 
btnComment.ID = "btnComment" + Link.ID.ToString() 
btnComment.Text = "btnComment" + Link.ID.ToString() 
updComments.ContentTemplateContainer.Controls.Add(btnComment) 
ScriptManager1.RegisterAsyncPostBackControl(btnComment) 

plcComments.Controls.Add(updComments) 

通常の状況では、トリガを実行するボタンごとにコードがあると思います。これらのボタンは一意の名前で動的に作成されるため、押されたときに各ボタンにどのように反応できますか?これは、それが作成されると、各ボタンにラッチ同じサブルーチンに戻って指して、サブルーチン内のコントロールを作成します

AddHandler btnComment.Click, AddressOf Me.Button_Handler 

答えて

0

はAddHandlerの関数に見た後、私はこの汚い方法を思い付きました送信者に基づいて

Protected Sub Button_Handler(sender As Object, e As EventArgs) 

    Dim Comment_ID As String = DirectCast(sender, Button).ID.ToString.Remove(0, 3) 

    Dim txtComment As TextBox = Me.FindControl("txt" & Comment_ID) 
    Dim plcComment As PlaceHolder = Me.FindControl("plc" & Comment_ID) 
    Dim updComment As UpdatePanel = Me.FindControl("upd" & Comment_ID) 

End Sub 

恐らく最もクリーンな方法ではありませんが、それは機能します。

関連する問題