Asp.net 动态生成的代码隐藏按钮赢得';我不会放火的

Asp.net 动态生成的代码隐藏按钮赢得';我不会放火的,asp.net,vb.net,Asp.net,Vb.net,我有一系列控件(3个标签、3个文本框和2个按钮),这些控件是在用户单击我页面上的按钮时创建的。页面使用生成这些控件的命令进行回发。但是,当我填写文本框并单击其中一个新生成的按钮(btnCreate)时,什么都没有发生,页面只是再次重新加载 我想做的是,当用户单击btnCreate时,它启动其函数,并将TextBox.Text放入数据库。但是,当再次单击btnCreate时,什么也不会发生 下面是生成的按钮的代码(与生成文本框的函数相同,我在这里排除了该函数): 为了简单起见,让我们假设btnCr

我有一系列控件(3个标签、3个文本框和2个按钮),这些控件是在用户单击我页面上的按钮时创建的。页面使用生成这些控件的命令进行回发。但是,当我填写文本框并单击其中一个新生成的按钮(
btnCreate
)时,什么都没有发生,页面只是再次重新加载

我想做的是,当用户单击
btnCreate
时,它启动其函数,并将
TextBox.Text
放入数据库。但是,当再次单击
btnCreate
时,什么也不会发生

下面是生成的按钮的代码(与生成文本框的函数相同,我在这里排除了该函数):

为了简单起见,让我们假设
btnCreate
只需要显示文本框的内容

Edit1:创建特殊注释的调用在第\u页的preInit上。它的调用包括以下内容

    Protected Sub Page_PreInit(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.PreInit
    'Find the control that was fired
    Dim controlFired As Control = GetPostBackControl(Me.Page)

    If (controlFired IsNot Nothing) Then
        If (controlFired.ClientID.ToString() = "btnCreateSpecial") Then
            Call createSpecialNotes()
        End If
        If (controlFired.ClientID.ToString() = "btnCreate") Then
            'i've tried putting things here to no avail.
        End If
    End If

End Sub
函数getpostbackcontrol如下所示

    Public Shared Function GetPostBackControl(ByVal thePage As Page) As Control
    Dim myControl As Control = Nothing
    Dim ctrlName As String = thePage.Request.Params.Get("__EVENTTARGET")
    If ((ctrlName IsNot Nothing) And (ctrlName <> String.Empty)) Then
        myControl = thePage.FindControl(ctrlName)
    Else
        For Each Item As String In thePage.Request.Form
            Dim c As Control = thePage.FindControl(Item)
            If (TypeOf (c) Is System.Web.UI.WebControls.Button) Then
                myControl = c
            End If
        Next

    End If
    Return myControl
End Function
公共共享函数GetPostBackControl(通过将页面设置为页面)设置为控件
将myControl设置为控件=无
Dim ctrlName As String=page.Request.Params.Get(“\u事件目标”)
如果((ctrlName不是空的)和(ctrlName String.Empty)),那么
myControl=page.FindControl(ctrlName)
其他的
在page.Request.Form中将每个项目作为字符串
尺寸c作为控件=页面查找控件(项目)
如果(c)的类型是System.Web.UI.WebControls.Button),那么
myControl=c
如果结束
下一个
如果结束
返回myControl
端函数

我希望这有助于澄清我遇到问题的原因。

这里真正有用的是知道何时调用
createSpecialNotes()
。但最有可能的是您缺少的是页面的生命周期

确保页面的
createSpecialNotes()
被调用为
OnInit
。之后的任何操作都太晚,您的事件处理程序将不会被触发

如果已到达页面的
OnLoad
,并且尚未将处理程序绑定到控件,则不会触发该处理程序


我建议你仔细阅读这篇文章

代码提示:Dim(something)As Button=New Button可以重写为Dim(something)As New Button。即使在回发时,也必须在init事件中添加动态控件。createSpecialNotes()工作正常。所有内容都正常显示,并在我单击调用它的按钮时立即显示。它在Page_PreInit上被调用。问题是当我点击“创建”时,什么也没发生。附录:所以我上传了一张我正在看的图片。我强调的是问题。该按钮还需要将textbox.text数据输入数据库。但是,我再次单击它,什么也不会发生。@user1066300您必须调用
createSpecialNotes()
才能访问它创建的任何内容,例如'if controlFired.ClientID.ToString()=“btnCreate”…'在调用
createSpecialNotes()
之前无法工作。但是我怎么知道在我的preinit上调用它呢,如果我的ControlFired变量是空的,就像我第一次单击create时一样?
    Public Shared Function GetPostBackControl(ByVal thePage As Page) As Control
    Dim myControl As Control = Nothing
    Dim ctrlName As String = thePage.Request.Params.Get("__EVENTTARGET")
    If ((ctrlName IsNot Nothing) And (ctrlName <> String.Empty)) Then
        myControl = thePage.FindControl(ctrlName)
    Else
        For Each Item As String In thePage.Request.Form
            Dim c As Control = thePage.FindControl(Item)
            If (TypeOf (c) Is System.Web.UI.WebControls.Button) Then
                myControl = c
            End If
        Next

    End If
    Return myControl
End Function