Кнопка ASP.NET Нажмите не пойман (кнопка в пользовательском управлении, которая динамически загружена в ретранслятор)

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

Вопрос

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

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

В пользовательском управлении есть кнопка Linkton, как это:

<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 ищет событие, оно ничего не может найти.

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

Являются ли идентификаторы usercontrol одинаковыми на каждом обратном обращении?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top