我的页面(asp.net)上有一个自定义搜索控件,其中包含一个文本框和一个用于显示结果的转发器。
当用户键入时,转发器会填充一个回调......漂亮而简单的回调。
...
When a search result is selected the repeater fires off a postback and the itemcommand event is raised (as expected) ... and this event adds a child repeater to itself and binds a child list to the current item.
我的问题是我不希望我的父转发器触发完整的回发,因为页面渲染非常耗时。我尝试将控件/只是外部中继器放入 ajax 更新面板控件,但它似乎仍然触发了一个 ful 回发。
谁能阐明我如何告诉转发器在回调而不是回发中触发其项目命令事件?
我猜这涉及到我的中继器项目控件的大量手动接线,但我希望在某处有一个控件可以为我处理所有这些:)
编辑:我的情况示例....
<asp:UpdatePanel ... >
<asp:Repeater ...>
<itemTemplate> <asp:LinkButton ... CommandArg='<%= Eval("ID") %>' CommandName="select" /> </itemTemplate>
</asp:Repeater>
</asp:UpdatePanel>
所以我的问题是...
我如何告诉中继器“在点击时触发此链接按钮作为回调而不是回发”
在更新面板中包装中继器的过程没有帮助,因为链接按钮的 ID 是动态的,因此我不能(无论如何都不是内联)为链接按钮添加触发器。
如果我在中继器 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>