1

ユーザーがページのボタンをクリックすると作成される一連のコントロール (3 つのラベル、3 つのテキスト ボックス、および 2 つのボタン) があります。ページは、これらのコントロールを生成するコマンドでポストバックを行います。しかし、テキスト ボックスに入力して、新しく生成されたボタン ( btnCreate) の 1 つをクリックしても、何も起こらず、ページがもう一度リロードされます。

私がやりたいことは、ユーザーが をクリックする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: create special notes の呼び出しは 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 に答える