【问题标题】:Responding to dynamically created async postback buttons响应动态创建的异步回发按钮
【发布时间】:2016-03-22 10:55:34
【问题描述】:

当我的 ASP 页面被加载时,我正在从 SQL 数据库读取数据到对象列表中,然后循环遍历该列表并创建动态占位符、更新面板、文本框和按钮,然后将它们添加到主占位符中。每个更新面板都设置为有条件的,并将唯一的按钮添加到脚本管理器中。我尝试动态创建异步触发器,但发现这是不可能的。以下是我的代码:

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)

在正常情况下,我知道您会为每个触发触发器的按钮设置代码。由于这些按钮是使用唯一名称动态创建的,因此当每个按钮被按下时,我如何对其做出反应?

【问题讨论】:

    标签: asynchronous updatepanel scriptmanager


    【解决方案1】:

    在查看了 AddHandler 函数后,我想出了这个肮脏的方法:

    AddHandler btnComment.Click, AddressOf Me.Button_Handler
    

    这会在每个按钮被创建时锁定它,指向同一个子例程,并根据发送者在子例程中创建控件。

    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
    

    可能不是最干净或最好的方法,但它确实有效。

    【讨论】:

      猜你喜欢
      • 2016-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-08
      • 1970-01-01
      • 2022-01-07
      • 1970-01-01
      相关资源
      最近更新 更多