【问题标题】:multiple ajax updateprogress not working多个ajax updateprogress不起作用
【发布时间】:2012-06-29 23:19:30
【问题描述】:

我有一个带有三个 ajax 更新面板的 asp.net 页面。在每个面板中都有一些控件,每个 updatepanel 作为一个 ajax 更新进度控件。第一个更新面板有一个下拉列表,其中 autopostback = true。第二个和第三个更新面板将此下拉列表作为 asynpostback 触发器。当我在下拉列表中更改选择时,只出现第一个 updateprogress 加载图像,而其他不出现。

我该如何解决?

【问题讨论】:

    标签: c# asp.net ajax


    【解决方案1】:

    尝试在更新面板中更改UpdateMode="Conditional"

    例子

    <script type="text/javascript">
    
            // Function to hide control on update
            function onUpdateOfSubscribe() {
                var panelProg = $get('divImage');
                // set it to visible
                panelProg.style.display = '';
                // hide label if visible      
                var lbl = $get('<%= this.pnlRegister.ClientID %>');
                lbl.innerHTML = '';
            }
            //Code to track the initiating event so to associate updateprogress
            var currentPostBackElement;
            function pageLoad() {
                var manager = Sys.WebForms.PageRequestManager.getInstance();
                manager.add_initializeRequest(OnInitializeRequest);
            }
            //On OnInitializeRequest
            function OnInitializeRequest(sender, args) {
                var manager = Sys.WebForms.PageRequestManager.getInstance();
                currentPostBackElement = args.get_postBackElement().parentElement;
    
                var cmdAuthoriseButton = '<%= btnRegister.ClientID %>';
                if (cmdAuthoriseButton == args._postBackElement.id) {
                    // Show UpdateProgress for subscribe 
                    onUpdateOfSubscribe();
                }
            }
    </script>
    </head>
    <body>
        <form id="form1" runat="server">
        <asp:ScriptManager ID="ScriptManager1" runat="server">
        </asp:ScriptManager>
        <div class="FormWrapper">
            <div class="rowHeader">
    
            </div>
                <asp:UpdatePanel ID="updRegister" runat="server" UpdateMode="Conditional"   >
                <ContentTemplate>  
                        <asp:Panel ID="pnlRegister" runat="server" Height="10px">
                            <div class="row" style="display:none;">
                                <asp:Label ID="Label7" runat="server" Text="Activity:" class="lbl"></asp:Label>
                                <asp:DropDownList ID="ddActivities" runat="server" CssClass="dd252"  DataTextField="EventTitle" DataValueField="EventID">
                                </asp:DropDownList>
                            </div>
                            <div class="row">
                                <asp:Label ID="lblSName" runat="server" Text="Name:" class="lbl"></asp:Label>
                                <asp:TextBox ID="txtSName" runat="server" CssClass="txt"></asp:TextBox>
                                <asp:RequiredFieldValidator ID="RequiredFieldValidator2"  runat="server" ErrorMessage="*" ControlToValidate="txtSName" ValidationGroup="ActivityReg" ></asp:RequiredFieldValidator>
                            </div>
                            <div class="row">
                                <asp:Label ID="lblSAge" runat="server" Text="Age:" class="lbl"></asp:Label>
                                <asp:TextBox ID="txtSAge" runat="server" CssClass="txt"></asp:TextBox>
                                <asp:RequiredFieldValidator ID="RequiredFieldValidator4"  runat="server" ErrorMessage="*" ControlToValidate="txtSAge" ValidationGroup="ActivityReg" ></asp:RequiredFieldValidator>
                                <asp:RangeValidator ID="RangeValidator1" runat="server" ErrorMessage="*" ControlToValidate="txtSAge" MaximumValue="100" MinimumValue="4" 
                                    ValidationGroup="ActivityReg" Type="Integer" ></asp:RangeValidator>
                            </div>
    
                            <div class="row">
                                <asp:Label ID="lblGMobile" runat="server" Text="Guardian Mobile:" class="lbl"></asp:Label>
                                <asp:TextBox ID="txtGMobile" runat="server" CssClass="txt"></asp:TextBox>
                                <asp:RequiredFieldValidator ID="RequiredFieldValidator5"  runat="server" ErrorMessage="*" ControlToValidate="txtGMobile" ValidationGroup="ActivityReg" ></asp:RequiredFieldValidator>
                                <asp:RequiredFieldValidator ID="RequiredFieldValidator1"  runat="server" ErrorMessage="*" ControlToValidate="txtGMobile" ValidationGroup="ActivityReg" ></asp:RequiredFieldValidator><asp:RegularExpressionValidator ID="RegularExpressionValidator2" runat="server"  ValidationGroup="ActivityReg"
                                    ControlToValidate="txtGMobile" ErrorMessage="*" ValidationExpression="[0-9 ]{9,}"></asp:RegularExpressionValidator>
                            </div>
                            <div class="rowDouble">
                                <asp:Label ID="lblAddress" runat="server" Text="Address:" class="lbl"></asp:Label>
                                <asp:TextBox ID="txtAddress" runat="server" CssClass="txtDouble" TextMode="MultiLine"></asp:TextBox>
                                <asp:RequiredFieldValidator ID="RequiredFieldValidator3"  runat="server" ErrorMessage="*" ControlToValidate="txtAddress" ValidationGroup="ActivityReg" ></asp:RequiredFieldValidator>   
                            </div>
                            <div class="row">
                                <asp:Button ID="btnRegister" CssClass="btn" runat="server" 
                                    ValidationGroup="ActivityReg" Text="Register" onclick="btnRegister_Click"  />
                            </div>
                            </asp:Panel> 
                        <div class="dSubMSG"> 
                            <asp:Label ID="lblMSG" runat="server" Text=""></asp:Label>
                        </div>
                        <div id="divImage" style="display:none" class="dSubAni">
                            <asp:Image ID="Image1" runat="server" ImageUrl="~/Images/ajax-loader-gray.png" Visible="true"/>
                        </div>
    
                    </ContentTemplate>
                    <Triggers>
                        <asp:AsyncPostBackTrigger ControlID="btnRegister" EventName="Click" />
                    </Triggers>
                </asp:UpdatePanel>
                <asp:UpdateProgress ID="updProgressRegister" runat="server" AssociatedUpdatePanelID="updRegister" >
                    <ProgressTemplate>
    
                    </ProgressTemplate>
                </asp:UpdateProgress>
        </div>
        </form>
    

    我有其他带有 UpdatePanel 和进度条的用户控件,我捕获了 ascy 回发的源并相应地隐藏或显示进度条。希望这会有所帮助..但你可能需要努力

    【讨论】:

    • 我做了,但结果相同。 updateprogress 是为触发 asynpostback 的 updatepanel 显示的,还是为所有正在更新的 updatepanel 显示的?
    • 我在多次更新时遇到了同样的问题,我做了什么我捕获了回发源并根据特定面板隐藏和显示进度条。我将添加特定于我的逻辑的代码,您可以通过一些修改来实现相同的逻辑..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-14
    • 1970-01-01
    • 2011-12-14
    • 1970-01-01
    • 2011-09-13
    • 2012-07-20
    • 2015-11-20
    相关资源
    最近更新 更多