1

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

我想要发生的是,当用户单击时btnCreate,它会触发其功能,并将其TextBox.Text放入数据库中。但同样,当btnCreate被点击时,什么也没有发生。

这是生成按钮的代码(与生成文本框的函数相同,我在此处排除了它):

Protected Sub createSpecialNotes()
    Dim btnCreate As Button = New Button
    Dim btnClear As Button = New Button

    'Place properties

    lblSubject.Text = "subject"
    lblSubject.ID = "lblSubject"
    lblSubject.Width = 700
    lblAgenda.Text = "Agenda Note"
    lblAgenda.ID = "lblAgenda"
    lblAgenda.Width = 700
    lblMinutes.Text = "Minutes Note"
    lblMinutes.ID = "lblMinutes"
    lblMinutes.Width = 700

    btnCreate.Text = "Create"
    btnCreate.ID = "btnCreate"
    btnClear.Text = "Clear"
    btnClear.ID = "btnClear"

    'Add handlers for buttons
    AddHandler btnCreate.Click, AddressOf btnCreate_Click
    AddHandler btnClear.Click, AddressOf btnClear_Click

    plhCreateSpecialNotes.Controls.Add(btnCreate)
    plhCreateSpecialNotes.Controls.Add(btnClear)
End Sub

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

Edit1:创建特殊注释的调用在 page_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

我希望这有助于弄清楚我为什么会遇到麻烦。

4

1 回答 1

2

这里真正有用的是知道你什么时候打电话createSpecialNotes()。但很可能您缺少的是页面的生命周期。

确保createSpecialNotes()调用OnInit您的页面。之后的任何事情都为时已晚,您的事件处理程序将不会被解雇。

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

我建议你仔细阅读这篇文章。http://msdn.microsoft.com/en-us/library/ms178472.aspx

于 2012-07-19T16:58:17.880 回答