ASP.NET: UpdateProgress не работает с элементами управления, которые имеют ClientIDMode = "Static" - PullRequest
7 голосов
/ 05 декабря 2011

Посмотрите на эту разметку:

<asp:UpdatePanel ID="Panel1" runat="server" UpdateMode="Conditional">
    <ContentTemplate>
        <asp:DropDownList ID="cboBox1" ClientIDMode="Static" AutoPostBack="true" runat="server" />
    </ContentTemplate>
</asp:UpdatePanel>

<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
    <ContentTemplate>
        <asp:DropDownList ID="cboBox2" runat="server" />
        <asp:UpdateProgress ID="UpdateProgress1" style="display: inline" AssociatedUpdatePanelID="Panel1" DynamicLayout="false" DisplayAfter="0" runat="server">
            <ProgressTemplate>
                <img src='<%= ResolveClientUrl("~/Images/indicator.gif")%>' border="0" alt="" />
            </ProgressTemplate>
        </asp:UpdateProgress>
    </ContentTemplate>
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="cboBox1" EventName="SelectedIndexChanged" />
    </Triggers>
</asp:UpdatePanel>

Элемент управления UpdateProgress работал изначально, но не работал, когда мы добавили ClientMode = "Static" в cboBox1.Вернуть его обратно в AutoID не вариант, поэтому мне нужно найти решения, позволяющие панели UpdateProgress работать с ClientIDMode = "Static".

Кроме того, может ли кто-нибудь добавить "clientidmode" в список тегов?

1 Ответ

2 голосов
/ 05 декабря 2011

Похоже, что это ошибка в PageRequestManager, поскольку postBackElement не передается обработчику события beginRequest.Для этой конкретной проблемы вы можете использовать следующий скрипт:

$(function () {
     $("#cboBox1").live("change", function () {
          window.setTimeout(function () {
               var progress = $find("<%= UpdateProgress1.ClientID %>");
               // since you use 0 DisplayAfter property value you may 
               // just call progress.set_visible(true);
               // without timeout usage
               window.setTimeout(function () { progress.set_visible(true); }, progress.get_displayAfter());
          }, 0);
     });
});
...