Я написал пользовательский элемент управления, который фиксирует некоторый пользовательский ввод и имеет кнопку Сохранить, чтобы сохранить его в БД. Я использую повторитель для отображения ряда этих элементов управления на странице - представьте список вопросов с несколькими вариантами ответов с кнопкой «Сохранить» для каждого вопроса.
Я загружаю пользовательский элемент управления внутри события 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','')