我有一系列控件(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
只需要显示文本框的内容。
编辑1:创建特殊注释的请求在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
我希望这有助于澄清我遇到麻烦的原因。
答案 0 :(得分:2)
这里真正有用的是知道你何时打电话给createSpecialNotes()
。但很可能你缺少的是页面的生命周期。
确保createSpecialNotes()
被称为您网页的OnInit
。之后的任何事情都太晚了,你的事件处理程序也不会被解雇。
如果您的页面已OnLoad
,并且您还没有将处理程序绑定到您的控件,那么它将不会被触发。
我建议您仔细阅读本文。 http://msdn.microsoft.com/en-us/library/ms178472.aspx