0

コントロールAとコントロールBの2つのコントロールをロードするasp.netページがあります。コントロールAには、リフレクションを使用してコントロールBの更新機能を呼び出す独自のコードビハインドでクリックイベントをトリガーするいくつかの一般的なフォーム送信ボタンとクリアボタンがあります。いくつかの入力フィールドがあります。私はこれをデバッグしましたが、すべてが順調に進んでいるようです。コントロール B の update 関数が呼び出されたときに、inputname.text または me.inputname.text を使用すると、入力フィールドが値を返さない。なぜこれが機能しないのか、誰にもアイデアがありますか? 任意のガイダンスをいただければ幸いです。

これは、コントロール B のコード ビハインドで update メソッドを呼び出すコントロール A のコード ビハインドのコードです。

    Protected Sub btnSave_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnSave.Click
    Try
        Dim lctlControl = Session("SelectedQstnCtl")
        Dim methodObj = lctlControl.GetType().GetMethod("UpdateGenInfo", BindingFlags.NonPublic Or BindingFlags.Instance)
        ' Execute UpdateGenInfo method to update the data 
        methodObj.Invoke(lctlControl, Nothing)
    Catch ex As Exception
        'TODO: check for concurrency error here
    End Try
End Sub

これは、呼び出されているコントロール B の更新関数です。セッション値は渡されていますが、フォーム フィールドは渡されていません。

Protected Sub UpdateGenInfo()
    Dim lclUtil As New clUtility
    Dim genInfo As New clGenInfo
    Try
        Dim dt As Integer
        'Update Data for 1-2
        dt = genInfo.UpdateGenInfo_E1_01_02(Session("ConnStrEP"), Me.varLastUpdate, Session("AppNo"), Session("RevNo"), _
                                          Me.txtPrName.Text, Me.txtPrAddr1.Text, Me.txtPrAddr2.Text, _
                                          Me.txtPrCity.Text, Me.txtPrState.Text, Me.txtPrZip.Text)
    Catch ex As Exception
        'Display error
        lclUtil.DisplayMsg(Me.lblErrMsg, String.Format("Error Location: Sub LoadGenInfo (ctlE1_01_02) {0}", ex.Message))
    End Try
End Sub
4

2 に答える 2

0

コントロール内のメソッドを直接参照してみてください。次にメソッド UpdateGenInfo を公開してから、このように参照してください。

Protected Sub btnSave_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnSave.Click
Try
    Dim lctlControl = CType(Session("SelectedQstnCtl"),YourControlClass)
    lctlControl.UpdateGenInfo()
Catch ex As Exception

End Sub

Public Function UpdateGenInfo()
 'your code here

Catch ex As Exception

End Try
 End Function

このようにして、価値観が失われている場所を簡単に追跡できます。どうなるか教えてください。

ここでデモを行う別の簡単なアプローチを試してください

コントロールで

Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

    Dim testb1 = CType(Me.NamingContainer.FindControl("testb1"), testb)
    testb1.UpdateGenInfo()
End Sub

コントロール b

 Public Function UpdateGenInfo()

    Try

        Dim a = Me.TextBox1.Text
    Catch ex As Exception

    End Try
End Function

Aspx親ページ

    <uc1:testa ID="testa1" runat="server" />
    <uc2:testb ID="testb1" runat="server" />

testb のコントロールは更新パネルにあります。これを試して、うまくいくかどうか教えてください。

于 2013-05-02T14:04:42.667 に答える