一部のユーザー入力をキャプチャし、それを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
参考までに、行ごとに異なるコントロールを使用できるため、ItemTemplateでコントロールを指定するのではなく、実行時にコントロールをロードする必要があります。
ユーザーコントロールには、次のようなリンクボタンがあります。
<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','')