ページ(asp.net)に、結果を表示するためのテキストボックスとリピーターを含むカスタム検索コントロールがあります。
ユーザーが入力すると、リピーターにコールバックが入力されます...素晴らしくシンプルなコールバック。
..。
検索結果が選択されると、リピーターがポストバックを起動し、itemcommandイベントが発生します(予想どおり)...このイベントは、子リピーターをそれ自体に追加し、子リストを現在のアイテムにバインドします。
私の問題は、ページのレンダリングにかなりの時間がかかるため、親リピーターが完全なポストバックを起動したくないということです。コントロール/アウターリピーターだけをajaxアップデートパネルコントロールに入れてみましたが、それでも十分なポストバックが発生するようです。
ポストバックではなくコールバックでアイテムコマンドイベントを発生させるようにリピーターに指示する方法を誰かが明らかにすることはできますか?
これには私のリピーターアイテムコントロールの手動配線の負荷が含まれていると思いますが、私のためにそれらすべてを処理するコントロールがどこかにあることを望んでいます:)
編集:私の状況のサンプル...
<asp:UpdatePanel ... >
<asp:Repeater ...>
<itemTemplate> <asp:LinkButton ... CommandArg='<%= Eval("ID") %>' CommandName="select" /> </itemTemplate>
</asp:Repeater>
</asp:UpdatePanel>
だから私の質問は...
リピーターに「このリンクボタンをポストバックではなくコールバックとしてonclickで起動する」ように指示するにはどうすればよいですか。
リンクボタンの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>