Не удается перепривязать Repeater после запуска ItemCommand (используя asyncpostback через updatepanel) - PullRequest
0 голосов
/ 14 июля 2011

Вот сценарий:

Внутри UpdatePanel есть повторитель, называемый updPanel.

Внутри этого повторителя есть две кнопки, которые запускают ItemCommand.

Взагрузка страницы У меня есть этот метод:

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, команда выполняется, но экран не обновляется (одна из кнопок элемента должнаизменить его значок после нажатия).Если я обновлю страницу или нажму кнопку «Привязать», повторитель покажет данные, как и ожидалось.

Почему они не привязываются после 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>

РЕДАКТИРОВАТЬ: Чтобы упростить это поведение, которое я получаю:

Нажав на кнопку за пределами ретранслятора: Значок меняется.Обновления БД.

Нажатие на кнопку внутри элемента в повторителе: Значок не изменяется.Обновления БД.

Повторное нажатие на кнопку внутри элемента в повторителе: Значок меняется.Обновления БД.Но теперь соответствующий пункт не так, потому что я уже снова поменял флаг

Кажется, это связано с порядком, в котором происходят вещи.

РЕДАКТИРОВАТЬ: Я забыл упомянуть, я тестировал с полной обратной передачей, и все работает нормально.

Ответы [ 2 ]

0 голосов
/ 14 июля 2011

Когда вы загружаете myDataSource?

Если вы загружаете в него данные в Page_Load, который выполняется до rptList_ItemCommand, тогда bind() будет привязывать старый набор данных к повторителю. Это объяснило бы ваше третье резюме:

Повторное нажатие на кнопку внутри элемента в повторителе: значок меняется. Обновления БД. Но теперь соответствующий пункт не так, потому что я уже снова поменял флаг

Не могли бы вы дать нам более подробную информацию о вашем источнике данных и обработчике события для кнопки вне ретранслятора?

0 голосов
/ 14 июля 2011

Вопрос для вас - какие изменения вы вносите, что вы ожидаете увидеть после нажатия кнопки элемента? Вы обновляете элемент управления кнопки в повторителе или вносите изменения в источник данных?

Я подозреваю, что ваш контроль восстанавливается, но вы не видите никаких изменений, потому что перезаписываете измененную кнопку. Установите в своем коде некоторые точки останова или записи сообщений в журнал (не используйте response.write с ASP.Net AJAX, хотя - это сломает вещи в асинхронных обратных передачах) и посмотрите, что на самом деле происходит. Выполняется ли метод bind ()?

...