ASP.net - кнопки LinkBetpe в Repeater в UpdatePanel не запускают обратную передачу любого вида - PullRequest
1 голос
/ 13 сентября 2010

Моя страница содержит Repeater, который загружается с данными асинхронно, когда данные становятся доступными, используя UpdatePanel для управления асинхронными запросами.

Страница содержит что-то вроде этого:

 <asp:UpdatePanel ID="DataUpdatePanel" runat="server">
 <ContentTemplate>
 <table>
    <asp:Repeater ID="RepeaterBlock" runat="server">
    <HeaderTemplate><thead><tr><th>Name</th><th>Status</th><th class="empty"></th></tr></thead></HeaderTemplate>
    <ItemTemplate><tr>
        <td><a class="link" href="Detail.aspx?item=<%# DataBinder.Eval( Container.DataItem, "Name") %>"><%# DataBinder.Eval( Container.DataItem, "Name") %></a>
        </td>
        <td><%# DataBinder.Eval( Container.DataItem, "Status") %></td>
        <td class="no-border">
            [<asp:LinkButton CommandName='Schedule' CommandArgument='<%# DataBinder.Eval(Container.DataItem, "Name") %>' ID="ScheduleButton" runat="server" CausesValidation="false" >Schedule</asp:LinkButton>]
        </td>
     </tr></ItemTemplate>
    </asp:Repeater>
</table>
</ContentTemplate>
</asp:UpdatePanel>

Проблема в том, что LinkButton, по-видимому, не запускает какую-либо обратную передачу - нет видимого ответа на нажатие на нее и установку точки останова на слушателе событий в коде, он никогда не срабатывает.

Я пытался вручную добавить триггер, например:

<Triggers>
   <asp:AsyncPostBackTrigger ControlID="ScheduleButton" />
</Triggers>

Но, к сожалению, из-за того, что элементы управления находятся внутри ContentTemplate, он вылетает, если я пытаюсь это сделать.

Другой путьВы должны явно добавить их в коде:

  RepeatData.DataBind();
  RepeatData.ItemCommand += new RepeaterCommandEventHandler(RepeatData_ItemCommand);

  UpdateScripts.RegisterAsyncPostBackControl(FindControlRecursive( RepeatData, "SchedulButton"));

Метод FindControlRecursive просто ведет себя как FindControl, только на самом деле находит элементы управления.

Это не приводит к сбою, но это также не заставляет LinkButtons вступать в силу.

Может кто-нибудь предложитьчто мне нужно сделать, чтобы заставить их отправлять сообщения обратно, как я ожидаю?

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

Ответы [ 2 ]

1 голос
/ 13 сентября 2010

Чтобы использовать свойства CommandName / CommandArg, необходимо зарегистрировать все кнопки ссылок в OnCommand с помощью обработчика событий на стороне сервера.

[<asp:LinkButton CommandName='Schedule' CommandArgument='<%# DataBinder.Eval(Container.DataItem, "Name") %>' ID="ScheduleButton" runat="server" CausesValidation="false" OnCommand="LinkButtonCommandEventHandler" >Schedule</asp:LinkButton>]

См. Ссылку MSDN:

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.linkbutton.commandname.aspx

0 голосов
/ 13 сентября 2010

Вам нужно либо <asp:Repeater ID="RepeaterBlock" runat="server" OnItemCommand="RepeaterData_ItemCommand">

или RepeatData.ItemCommand += new RepeaterCommandEventHandler(RepeatData_ItemCommand); в каждом постбеке до RepeatData.DataBind();

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