Не удается обновить вторую панель обновления - PullRequest
4 голосов
/ 16 июля 2010

У меня есть 3 панели обновлений на моей странице, и я хочу, чтобы 2 из них обновлялись при возникновении события. В одной из панелей обновления у меня есть asp ReoderList.

<asp:UpdatePanel ID="upMain" UpdateMode="Conditional" runat="server" style="left: 0px; top: 0px; min-height: 100px; width: 495px; overflow: auto;">
                <ContentTemplate>
                    <div class="reorderListDemo" style="position: relative; left: -41px; width: 490px; overflow: auto;">
                        <ajax:ReorderList ID="rlAlerts" Style="min-height: 100px; padding: 0px 6px 0px 0px;" Width="480px" runat="server" PostBackOnReorder="false" CallbackCssStyle="callbackStyle" DragHandleAlignment="Left" DataKeyField="ItemID" SortOrderField="Priority" OnItemReorder="rlAlerts_ItemReorder">
                            <ItemTemplate>
                                <%--set the class to inactiveAlert if the active flag is set to false--%>
                                <div id="alertItem<%# Eval("ItemID")%>" class="<%# Convert.ToBoolean(Eval("Active")) ? "" : "inactiveAlert" %>" onclick="updateAlertPreview('<%# Eval("ItemID")%>','<%# Eval("Priority")%>','<%# Eval("Title") %>','<%# Eval("Description") %>', '<%# Eval("StartDate") %>', '<%# Eval("EndDate")  %>', '<%# Eval("Image") %>');">
                                    <div style="position: relative; float: left; left: 10px; padding-top: 6px; overflow: hidden; width: 180px; height: 17px;">
                                        <asp:Label ID="Label4" runat="server" Text='<%# HttpUtility.HtmlEncode(Convert.ToString(Eval("Title"))) %>' />
                                    </div>
                                 </div>
                            </ItemTemplate>
                            <ReorderTemplate>
                                <asp:Panel ID="Panel2" runat="server" CssClass="reorderCue" />
                            </ReorderTemplate>
                            <DragHandleTemplate>
                                <div class="dragHandle">
                                </div>
                            </DragHandleTemplate>
                        </ajax:ReorderList>
                    </div>
                </ContentTemplate>
                <Triggers>
                    <asp:AsyncPostBackTrigger ControlID="rlAlerts" EventName="ItemReorder" />
                    <asp:AsyncPostBackTrigger ControlID="ckbxShowInactive" EventName="CheckedChanged" />
                </Triggers>
            </asp:UpdatePanel>

В настоящее время эта панель обновлений будет обновляться либо при изменении порядка элементов, либо при изменении состояния флажка. Теперь у меня есть вторая панель обновления, которая не обновляется при переупорядочении списка.

<asp:UpdatePanel ID="UpdatePanelAlertOrderNotification" UpdateMode="Conditional" runat="server">
                    <ContentTemplate>
                        <asp:Label ID="lblOrderChangedNotification" runat="server"></asp:Label>
                    </ContentTemplate>
                    <Triggers>
                        <asp:AsyncPostBackTrigger ControlID="rlAlerts" EventName="ItemReorder" />
                    </Triggers>
                </asp:UpdatePanel>

Вот мой код:

    protected void rlAlerts_ItemReorder(object sender, AjaxControlToolkit.ReorderListItemReorderEventArgs e)
        {
           .....
           Session["AlertOrderChangedNotification"] = Resources.LocalizedText.Alert_Order_Changed;

            lblOrderChangedNotification.Text = "AWESOME";
            //lblOrderChangedNotification.DataBind();
            //UpdatePanelAlertOrderNotification.Update();
}

Я прошелся по коду и не могу понять, почему он не работает.

Вещи, которые я устал Я устал всегда устанавливать UpdateMode UpdatePanelAlertOrderNotification. иметь UpdateMode UpdateMode Update to Mode для параметра «Условный», удалить его триггеры и заставить код функции обновлять Обновление панели напрямую. сохранить текст в сеансе и при запуске публикации страницы проверить, есть ли текст в сеансе. Я могу перешагнуть этот код на странице загрузки функционировать и до сих пор ничего не делает. (Пробовал с обеими закомментированными строками, а затем только с 1, затем ни с одной из них не закомментировал.)

protected void Page_Load(object sender, EventArgs e)
        {
            if (Session["AlertOrderChangedNotification"] != null)
            {
                lblOrderChangedNotification.Text = Session["AlertOrderChangedNotification"] as string;
                //lblOrderChangedNotification.DataBind();
                //UpdatePanelAlertOrderNotification.Update();
            }
        }

Я не знаю, возникает ли у меня проблема, потому что у меня есть две панели обновления с одинаковым триггером (хотя Я попытался удалить его из UpdatePanelAlertOrderNotification и установить его всегда.)

Changs: Поэтому я попытался добавить новую кнопку и получить панель обновления для обновления. Это работает. Если я переключу триггеры обратно в список переупорядочения, это не сработает. Итак, мой вопрос, могу ли я иметь 2 разные панели обновления с одинаковым триггером? Если я не могу, я должен иметь возможность получить поврежденное обновление, вызвав UpdatePanelAlertOrderNotification.Update () ?? Идеи?

<div style="position: absolute; top: 195px; right: 10px; height: 100px; width: 120px; overflow: hidden;">
                    <asp:UpdatePanel ID="UpdatePanelAlertOrderNotification" UpdateMode="Conditional" runat="server">
                        <ContentTemplate>
                            <asp:Label ID="lblOrderChangedNotification" runat="server"></asp:Label>
                        </ContentTemplate>
                        <Triggers>
                            <%--<asp:AsyncPostBackTrigger ControlID="rlAlerts" EventName="ItemReorder" />--%>
                            <asp:AsyncPostBackTrigger ControlID="btnUpdateBrokenUpdatePanel" EventName="Click" />
                        </Triggers>
                    </asp:UpdatePanel>
                    <div style="position: relative; top: 25px; left: 10px;">
                        <asp:Button ID="btnUpdateBrokenUpdatePanel" runat="server" CssClass="redButton" Width="300px" Height="25px" Text="Update Broken UPdatePanel" OnClick="btnUpdateBrokenUpdatePanel_Click" />
                    </div>

Любая помощь будет потрясающей. Спасибо Брэд

Ответы [ 2 ]

0 голосов
/ 16 июля 2010

Проблема, с которой вы столкнулись, заключается в том, что элемент управления rlAlerts находится в шаблоне содержимого первой панели обновлений, и когда вы определяете асинхронный триггер во 2-й панели обновления, он не знает о rlAlerts, поскольку к нему был добавлен контейнер именования из 1-гоUpdatePanel.

Попробуйте один из следующих подходов:

  • Вынесите rlAlerts за пределы панели обновления, если это возможно
  • В коде для обработчика события ItemReorder явный вызов UpdatePanelAlertOrderNotification.Обновить().Как будто вы пытались, и это не работает, что странно
  • Явно зарегистрируйте триггер из кода для 2-й панели обновления при предварительном просмотре:

    UpdatePanelAlertOrderNotification.Triggers.Add (new AsyncPostBackTrigger)() {ControlID = rlAlerts .UniqueID, EventName = "ItemReorder"});

0 голосов
/ 16 июля 2010

Я предполагаю, что у вас проблема с панелями обновлений, которые не получают надлежащего уведомления, я бы настроил оберточную с условным триггером, а затем вызвал бы метод обновления для обеих других.

Одна вещь, в которой вы хотите убедиться, это то, что ваш код, который фактически обновляет отображение этих элементов, также выполняется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...