0

シナリオは次のとおりです。

updPanel という UpdatePanel 内にリピーターがあります。

このリピーター内には、ItemCommand を起動する 2 つのボタンがあります。

ページの読み込みには、次のメソッドがあります。

if (!IsPostBack)
{               
    Bind();
}

次に、Bind() で:

public void Bind()
{
    rptList.DataSource = Model.GetData(Version);
    rptList.DataBind();
}

次に、ItemCommand イベントで:

public void rptList_ItemCommand(object source, RepeaterCommandEventArgs e)
{
    //Some code to get info about the DataItems
    if (e.CommandName.Equals("MyCommandName1"))
    {
        //Do Stuff
    }
    else if (e.CommandName.Equals("MyCommandName2"))
    {
        //Do Other Stuff
    }
    Bind();
}

Bind() 以外は何もしないボタン (同じ更新パネル内で、リピーターの外) があります。

ItemCommand をクリックすると、コマンドは実行されますが、画面は更新されません (項目ボタンの 1 つをクリックするとアイコンが変わります)。ページを更新するか、[バインド] ボタンをクリックすると、リピーターは期待どおりにデータを表示します。

ItemCommand の後にバインドしないのはなぜですか?

前もって感謝します!

編集:私のリピーター:

<asp:Repeater ID="rptList" runat="server">
    <HeaderTemplate>
        <h3>
            <b class="rollback">Rollback</b> | <b class="emteste">Em Teste</b> | <b class="aindanaoincluido">
                            Ainda não Incluído</b> | <b class="parcialmenteok">Atividade Parcialmente OK</b>
                        | <b class="todosok">Atividade OK em Todas as Lojas</b> | <b class="publicado">Atividade
                            Publicada</b>
        </h3>
    </HeaderTemplate>
    <ItemTemplate>
        <div class="item" style="display: inline-block">
            <p style="font-size: 12px">
                <asp:ImageButton ToolTip="Marcar como Rollback" ImageUrl="/_layouts/Extensions/Versioning/img/rollback.png"
                                CommandName="MarkAsRollback" ID="btnItemRollback" CssClass="itembutton" runat="server" />
                <asp:ImageButton ToolTip="Esta atividade possui código. Clique para sinalizar como apenas procedure/config"
                                ImageUrl="/_layouts/Extensions/Versioning/img/code.png" CommandName="MarkAsProc"
                                ID="btnItemProc" CssClass="itembutton" runat="server" />
                 <asp:Image ToolTip="Esta atividade não possui scripts de banco/zips." ImageUrl="/_layouts/Extensions/Versioning/img/noscript.png"
                                runat="server" CssClass="itembutton" ID="btnItemScript" />
                 <asp:Label ID="labelWI" Text="" runat="server"></asp:Label>
                 <span style="color: #4A82CB">
                                <%# DataBinder.Eval(Container.DataItem, "SystemAssignedTo") %>
                                - </span><span style="color: Navy">
                                    <%# DataBinder.Eval(Container.DataItem, "SystemTitle") %>
                                </span>
                 <asp:HiddenField ID="workItemID" runat="server" />
              </p>
         </div>
         <hr class="item" noshade style="color: #4CBDCB; height: 2px; background-color: #4CBDCB" />
     </ItemTemplate>
</asp:Repeater>

編集:簡単にするために、これは私が得ている動作です:

リピーター外のボタンをクリック:アイコンが変わります。DB の更新。

リピーターのアイテム内のボタンをクリックすると、アイコンが変化しません。DB の更新。

リピーターのアイテム内のボタンをもう一度クリックすると、アイコンが変わります。DB の更新。しかし、フラグを再度変更したため、対応するアイテムが間違っています

物事が起こる順序に関係しているようです。

編集:言及するのを忘れていました。完全なポストバックでテストしたところ、すべて正常に動作しました。

4

2 に答える 2

0

あなたへの質問 - アイテム ボタンをクリックした後に、どのような変更を期待していますか? リピーターのボタン コントロールを更新していますか、それともデータソースに変更を加えていますか?

コントロールが再バインドされていると思われますが、変更したボタンを上書きしているため、変更が表示されません。コードにいくつかのブレークポイントまたはログ メッセージを設定し (ただし、ASP.Net AJAX で response.write を使用しないでください。非同期ポストバックで問題が発生します)、実際に何が起こっているかを確認します。bind() メソッドは実行されていますか?

于 2011-07-14T14:28:50.527 に答える
0

いつロードしていmyDataSourceますか?

の前にPage_Load実行される でデータをロードしている場合、古いデータ セットをリピータにバインドすることになります。これはあなたの3番目の要約ポイントを説明します:rptList_ItemCommandbind()

リピーターのアイテム内のボタンをもう一度クリックすると、アイコンが変わります。DB の更新。しかし、フラグを再度変更したため、対応するアイテムが間違っています

データソースとリピーター外のボタンのイベント ハンドラーについて詳しく教えてください。

于 2011-07-14T17:50:45.437 に答える