0

ページ(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>&nbsp;</th><th>Branch Name</th><th>Branch Address</th><th>Tel</th><th>Fax</th><th>Email</th></tr>
                    </HeaderTemplate>
                    <ItemTemplate>   
                            <tr>
                                <td>&nbsp;&nbsp;&nbsp;</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>
4

2 に答える 2

2

私はあなたと同じような問題を抱えていました。linkbuttonsを通常のasp:buttonに置き換えて、リピーターのitemcommandイベントをそのまま使用し続けると、機能します。なんで?知らない。ただし、動作します。デザインに合わないかもしれませんが、希望する非同期ポストバックがトリガーされます。

于 2012-01-23T13:46:50.417 に答える
1
 <asp:Repeater runat="server" ID="rpt1">
    </asp:Repeater>


<asp:UpdatePanel runat="server" ID="up1">
<Triggers>
<asp:AsyncPostBackTrigger  ControlID="rpt1"/>
</Triggers>
<ContentTemplate>
     <asp:Repeater runat="server" ID="rpt2">
    </asp:Repeater>
</ContentTemplate>
</asp:UpdatePanel>

これにより、rpt1からのすべてのコマンドへの非同期呼び出しが実行されます。これらのリピーターコントロールをあなたのものと交換するだけです

編集:

私は基本的に、さまざまなフィールドなどを使用してコードのモックアップを作成しました。以下のコードはあなたが試したものであり、機能していなかったと思いますか?もしそうなら、私はそれが私のようにあなたの側で機能していない理由がわかりません、私たちが拾っていないところにいくつかのわずかな違いがあるに違いありません。

<asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>
    <asp:UpdatePanel runat="server" ID="UpdatePanel1">
    <ContentTemplate>
        <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>
                                                &nbsp;
                                            </th>
                                            <th>
                                                Branch Name
                                            </th>
                                            <th>
                                                Branch Address
                                            </th>
                                            <th>
                                                Tel
                                            </th>
                                            <th>
                                                Fax
                                            </th>
                                            <th>
                                                Email
                                            </th>
                                        </tr>
                                </HeaderTemplate>
                                <ItemTemplate>
                                    <tr>
                                        <td>
                                            &nbsp;&nbsp;&nbsp;
                                        </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>
</ContentTemplate>
</asp:UpdatePanel>
于 2011-04-11T12:26:31.977 に答える