【问题标题】:Ajax Loading for .NET ASPX Pages.NET ASPX 页面的 Ajax 加载
【发布时间】:2011-02-07 13:47:38
【问题描述】:

我有一个 .NET 4.0 ASPX 页面,它正在执行一系列半复杂的计算。这些计算可能需要一些时间,并在页面上分为许多方法。 ASPX 页面上的 UI 包含页面属性,这些属性检索作为这些计算结果分配的值。

我想知道推荐的 JS/Ajax/jQuery 方法,用于在使用 ASP.NET 进行初始页面加载后进行计算,并在处理计算时运行某种加载效果。

为了实现这一点,我希望代码尽可能轻量级。非常感谢有关最佳实践的指针和建议。

【问题讨论】:

    标签: jquery asp.net ajax loading page-lifecycle


    【解决方案1】:

    这些计算/过程需要多长时间?用户是否需要等待他们完成,或者用户可以在等待的同时去网站上做其他事情吗?

    也许这不是您想要的,但另一种方法是在服务器上的单独线程(甚至单独的应用程序)中运行计算。您会向用户显示一条消息,说明他们的计算已排队等待处理并将很快开始。

    用户可以回来查看它何时完成,甚至在父亲身上有某种通知系统(想象 Facebook 上的小红色“你有一条新消息”的东西,或一些类似的功能)告诉他们什么时候它已经完成并为用户提供了一个链接来查看结果。通知器可以轻松地通过 AJAX 执行一些后台轮询,每隔一段时间检查一次结果。

    如果缩放将成为此应用程序的一个问题,您可能需要研究这样的方法。响应页面事件的“在线”处理会随着系统的扩展而拖累性能,尤其是在负载较重的时候。通过在后台排队进程的“离线”处理将允许您监控队列的重负载、将这些进程卸载到不同的硬件、添加新功能而不会破坏用户体验或处理页面超时等。

    【讨论】:

    【解决方案2】:

    如果该操作是同步的,即用户必须等待它完成,您可以使用Ajax ModalPopupExtender 通知用户服务器正忙于进行长时间的计算。

    在 ModalPopupExtender 上,您可以放置​​一个微调器图标,或者扩展它以包含一个进度条。

    标记代码:

    <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
        <ContentTemplate>
            <asp:Button runat="server" ID="hiddenTargetControlForModalPopup" style="display:none"/>
            <ajaxToolkit:ModalPopupExtender runat="server" ID="programmaticModalPopup"
            BehaviorID="programmaticModalPopupBehavior" TargetControlID="hiddenTargetControlForModalPopup"
            PopupControlID="programmaticPopup" BackgroundCssClass="modalBackground"
            DropShadow="True" RepositionMode="RepositionOnWindowScroll" >
            </ajaxToolkit:ModalPopupExtender>
            <asp:Panel runat="server" CssClass="modalPopup" ID="programmaticPopup" style="background-color:#FFFFCC;display:none;height:75px;width:150px;padding:10px">
                <asp:UpdateProgress>
                    <ProgressTemplate>
                        <div style="text-align:center">
                            <div style="margin:auto;"><img alt="loading..." src="images/spinner.gif" /></div>
                            <p>This may take several minutes...Please wait.</p>
                        </div>
                    </ProgressTemplate>
                </asp:UpdateProgress>
            </asp:Panel>
    </asp:UpdatePanel>
    

    JS 代码(toggle 模态弹出窗口):

        function showPopup() {
            var modalPopupBehavior = $find('programmaticModalPopupBehavior');
            modalPopupBehavior.show();
        }
        function hidepopup() {
            var modalPopupBehavior = $find('programmaticModalPopupBehavior');
            modalPopupBehavior.hide();
        }
    

    注意:在某些高级情况下,您可能需要实现:

    Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);
    

    然后添加一个名为EndRequestHandler的JS handler,在服务器执行返回时调用。

    希望对您有所帮助。

    【讨论】:

    • 感谢您,我已经选择将此处理移到 ASP.NET 应用程序之外。
    猜你喜欢
    • 1970-01-01
    • 2012-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-04
    相关资源
    最近更新 更多