У меня есть пользовательский элемент управления поиском на моей странице (asp.net), который содержит текстовое поле и повторитель для отображения результатов.
Повторитель заполняется обратным вызовом, когда пользователь печатает ... красивый и простой обратный вызов.
...
Когда выбран результат поиска, повторитель запускает обратную передачу, и возникает событие itemcommand (как и ожидалось) ... и это событие добавляет дочерний повторитель к себе и привязывает дочерний список к текущему элементу.
Моя проблема в том, что я не хочу, чтобы мой родительский повторитель запускал полный постбэк, потому что страница отрисовывается довольно долго.
Я попытался поместить элемент управления / только внешний ретранслятор в элемент управления панели обновления ajax, но он все еще запускает полную обратную передачу.
Может ли кто-нибудь пролить свет на то, как я могу сказать повторителю запускать событие команды элемента в обратном вызове вместо обратного?
Я предполагаю, что это связано с нагрузкой на ручное подключение элементов управления моего повторителя, но я надеюсь, что где-то есть элемент управления, который обрабатывает все это для меня:)
РЕДАКТИРОВАТЬ: Образец моей ситуации ....
<asp:UpdatePanel ... >
<asp:Repeater ...>
<itemTemplate> <asp:LinkButton ... CommandArg='<%= Eval("ID") %>' CommandName="select" /> </itemTemplate>
</asp:Repeater>
</asp:UpdatePanel>
Так что мой вопрос ...
Как мне сказать ретранслятору "запускать эту ссылку по клику как обратный вызов вместо постбэка"
процесс наложения повторителя на панель обновлений не помогает, потому что идентификатор кнопки ссылки является динамическим, и поэтому я не могу (в любом случае, не встроенный) добавить триггер для кнопки ссылки.
Если я вручную добавляю триггер на панель в событии onitembound ретрансляторов, я получаю исключение из .Net, говоря, что ссылка обратного вызова недопустима ... Я думаю, это потому, что я пытаюсь присоединить триггер обратного вызова к элементу управления, который является уже обрабатывает событие обратной передачи или что-то, настроенное ретранслятором ...
РЕДАКТИРОВАТЬ 2: Пример сценария, с которым здесь сталкиваются
по сути, потому что этот элемент управления X количество раз на странице практически все должен быть динамическим.
Элемент управления реализует ICallbackHandler, а поисковый код bx (не включенный ниже) запускает ajax-вызов onkeyup, когда пользователь вводит названия компаний (поэтому он работает немного как google).
Я надеялся, что когда пользователь щелкнет по названию компании из списка, он будет ajax перезванивать / частичную обратную передачу, чтобы восстановить подсписок ветвей, таким образом предотвращая мерцание полной страницы, которое вы получаете при полной обратной передаче.
Затем пользователь выбирает ветку и выполняет полную обратную передачу, что приводит к нескольким действиям сервера.
Это прекрасно работает как есть ... это просто не самый чистый пользовательский опыт.
<div id='<%= this.UniqueID + "Results" %>' class="results">
<asp:Repeater ID="ui_lstCompanies" runat="server" onitemcommand="ui_lstCompanies_ItemCommand">
<HeaderTemplate>
<ul>
</HeaderTemplate>
<ItemTemplate>
<asp:Panel ID="item" runat="server">
<li>
<asp:LinkButton ID="ui_btnSelectCompany" runat="server" CommandName="Select" Text='<%# Eval("Name") %>' />
</li>
</asp:Panel>
<asp:Panel ID="selectedItem" runat="server" Visible="false">
<li>
<hr /><h4><%# Eval("Name") %></h4>
<asp:Repeater ID="ui_lstBranches" runat="server" onitemcommand="ui_lstBranches_ItemCommand" >
<HeaderTemplate>
<table style="border-collapse:collapse;">
<tr><th> </th><th>Branch Name</th><th>Branch Address</th><th>Tel</th><th>Fax</th><th>Email</th></tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td> </td>
<td><asp:LinkButton ID="ui_btnSelectBranch1" runat="server" CommandArgument='<%# Eval("ID") %>' CommandName="Select" Text='<%# Eval("Name") %>' /></td>
<td><asp:LinkButton ID="ui_btnSelectBranch2" runat="server" CommandArgument='<%# Eval("ID") %>' CommandName="Select" Text='<%# Eval("Address") %>' /></td></td>
<td><asp:LinkButton ID="ui_btnSelectBranch3" runat="server" CommandArgument='<%# Eval("ID") %>' CommandName="Select" Text='<%# Eval("Telephone1") %>' /></td></td>
<td><asp:LinkButton ID="ui_btnSelectBranch4" runat="server" CommandArgument='<%# Eval("ID") %>' CommandName="Select" Text='<%# Eval("Fax") %>' /></td></td>
<td><asp:LinkButton ID="ui_btnSelectBranch5" runat="server" CommandArgument='<%# Eval("ID") %>' CommandName="Select" Text='<%# Eval("Email") %>' /></td></td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
<hr />
</li>
</asp:Panel>
</ItemTemplate>
<FooterTemplate>
</ul>
</FooterTemplate>
</asp:Repeater>
</div>