ASP.NETボタンクリックはキャッチされていません(リピーターに動的にロードされるユーザーコントロールのボタン)

StackOverflow https://stackoverflow.com/questions/2978386

質問

ユーザーの入力をキャプチャし、DBに保存するための保存ボタンがあるユーザーコントロールを作成しました。リピーターを使用してページ上のこれらのコントロールの多くをレンダリングします。各質問ごとに保存ボタンを使用して、複数選択の質問のリストを想像してください。

このようなリピーターのItemDataBoundイベント内にユーザーコントロールをロードしています(コードが簡素化されました):

Protected Sub rptAssignments_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.RepeaterItemEventArgs) Handles rptAssignments.ItemDataBound

    Dim CurrentAssignment As Assignment = DirectCast(e.Item.DataItem, Assignment)
    Dim ctl As UA = CType(LoadControl("~\Controls\UA.ascx"), UA)

    ctl.AssignmentID = CurrentAssignment.AssignmentID
    ctl.Assignment = CurrentAssignment.AssignmentName
    ctl.EnableViewState = True

    e.Item.Controls.Add(ctl)
End Sub

参考までに、各行に異なるコントロールを使用できるため、項目テンプレートで指定するのではなく、実行時にコントロールをロードする必要があります。

ユーザーコントロールには、次のようなリンクボタンがあります。

<asp:LinkButton ID="lbnUpdate" runat="server" Text="Update" OnClick="lbnUpdate_Click" />

...そして、このようなハンドラーをクリックします:

Protected Sub lbnUpdate_Click(ByVal sender As Object, ByVal e As EventArgs) Handles lbnUpdate.Click
   ' my code to update the DB
End Sub

問題は、保存ボタンがクリックされると、ページが戻ってくるが、lbnupdate_clickが呼び出されないことです。ただし、ページ自体のpage_loadイベントは呼ばれます。

リピーターはユーザーコントロールの一部であり、ユーザーコントロールは別のユーザーコントロール内にロードされていることに注意してください(これは、ユーザーコントロールを豊富に使用するDotnetnukeサイトです)。保存ボタンリンクは次のようになります:

javascript:__doPostBack('dnn$ctr498$AssignmentsList$rptAssignments$ctl04$ctl00$lbnUpdate','')
役に立ちましたか?

解決

この問題は、WebFormsがどのようにそれ自体を覆うかを例示しています。

サブコントロールにイベントを提起するには、再結合またはViewStateからのリピーターを再構成する必要があります。あなたが支払う価格は、あなたのデータソースへの別の旅行またはViewStateのクライアントに保存されたすべての冗長なデータのいずれかです。恥ずかしい!

他のヒント

同じことかもしれない同様の問題が一度ありました。

要するに、あなたはボタンを動的に作成しているので、ポストバックの後 それらは存在しません. 。したがって、ASP.NET Webformsがイベントを探すと、何も見つかりません。

リピーターはいつDataBoundを取得しますか?ポストバックでボタンをページに再度レンダリングしてみてください(テストであっても)それがトリックを行うかどうかを確認してください。

usercontrolのIDはすべてのポストバックで同じですか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top