ASP.NET Нажатие кнопки не зафиксировано (кнопка в пользовательском элементе управления, которая динамически загружается в Repeater) - PullRequest
0 голосов
/ 05 июня 2010

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

Я загружаю пользовательский элемент управления внутри события 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','')

Ответы [ 3 ]

2 голосов
/ 05 июня 2010

Эта проблема иллюстрирует то, как webforms превосходит себя.

Вы должны восстановить Repeater, либо путем повторной привязки, либо из состояния просмотра, чтобы под-элементы управления вызывали события. Цена, которую вы платите - это либо еще одна поездка к вашему источнику данных, либо все эти избыточные данные, хранящиеся на клиенте в viewstate. Позорный!

1 голос
/ 05 июня 2010

Однажды у меня была похожая проблема, которая могла быть такой же.

Короче говоря, поскольку вы динамически создаете кнопки, после обратной передачи они не существуют . Таким образом, когда ASP.NET Webforms ищет событие, он не может ничего найти.

Когда ваш ретранслятор получает данные? Попробуйте отобразить кнопки на странице еще раз в постбэке (даже в качестве теста), чтобы проверить, справится ли это с задачей.

0 голосов
/ 05 июня 2010

Идентификаторы UserControl одинаковы при каждой обратной передаче?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...