2011-02-07 142 views
0

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

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

我希望代码尽可能轻便以达到此目的。最佳实践的指针和建议非常感谢。

回答

1

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

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

用户可以检查回来,看看它什么时候完成,或者甚至在公牛上有某种通知系统(图片上的红色“你有一个新消息”的事情在Facebook上,或一些类似的功能)告诉他们当它完成并为用户提供一个链接去查看结果。通知程序可以通过AJAX轻松地执行一些背景轮询,以便每隔几分钟检查一次结果。

如果扩展将成为这个应用程序的一个问题,您可能需要研究这种方法。响应页面事件的“在线”处理会在系统扩展时拖延性能,特别是在高负载时间的情况下。通过在后台将让你监视重载队列,卸载这些程序到不同的硬件,而不杀死用户体验或处理页面超时增加新功能排队过程中的意思是“脱机”处理等

+0

对不起,在这方面的答复延迟,谢谢你的回答,我正在把这个繁重的工作转移到一个控制台应用程序,在ASP.NET应用程序之外单独运行。 – Kevin 2011-03-25 08:38:11

1

如果该操作是同步的,即用户必须等待它完成,则可以使用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代码(到的toogle的模式弹出):

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处理程序,这是ca当服务器从执行中返回时进行填充。

希望有所帮助。

+0

感谢您的支持,我已选择将此处理移到ASP.NET应用程序之外。 – Kevin 2011-03-25 08:38:42