2016-10-13 13 views
4

ページが読み込まれると、そのユーザーコントロールのグリッドに表示されている検索結果を表示するために、ページのユーザーコントロールの1つでデータプルをすぐに開始する必要があります。これらの検索結果を取得するためのクエリにはかなりの時間(8〜10秒)かかることがあります。ASP.NET長時間実行するAjaxリクエスト。ページの応答性

私の目標は、高価なユーザーコントロールが独自のデータを単独で読み込んでいる間に、ユーザーがページの他の要素と自由にやりとりできるように、ユーザーコントロールを含むページの一部を更新するようにAjaxリクエストを行うことです。

私の現在のアプローチでは、そのコントロールがロードされている間、ユーザーはページ上のどの要素とも対話できません。たとえば、ページ上のどこかのボタンをクリックすると、長時間実行されるajaxリクエストが終了するまで、ボタンクリックのポストバックのPage_Load()には到達しません。他のAjaxリクエストは、長時間実行されているものの後ろに並んでいるようです。私はAjaxのポストバックが発生します隠しボタンがありRadAjaxPanelを持って

はここ(Telerikコントロールがアヤックスに使用します)私のアプローチです。このボタンは、ページが読み込まれたときにJavascriptでクリックされます。 pageLoadで

function DoAjaxPostBack() { 


      var interval = setInterval(function() 
       { 
        if(document.readyState === 'complete') 
        { 
         var argmnt=''; 
         var ajaxManager = $find("<%=RadAjaxManager.GetCurrent(Page).ClientID %>"); 
         ajaxManager.ajaxRequestWithTarget('<%= btnRADAjax.UniqueID %>', argmnt); 

         clearInterval(interval); 
        } 
       },100) 
     } 

:ボタンのクリックハンドラではAjaxのポストバックを行うためのボタンを呼び出すJavascriptをContentPlaceHolderControlにユーザーコントロールをロードし、

<telerik:RadAjaxPanel ID="RadAjaxPanel1" runat="server" LoadingPanelID="LoadingPanel1"> 
       <asp:PlaceHolder runat="server" ID="PlaceHolderControl"> 

         <!-- user control loaded here --> 

        <telerik:RadButton ID="btnRADAjax" runat="server" Style="visibility: hidden;"></telerik:RadButton> 

       </asp:PlaceHolder> 

コントロールのデータをロードするためのコードがあります:

If Not IsPostBack Then 
      RadScriptManager.RegisterStartupScript(Page, Page.GetType(), "1", "DoAjaxPostBack('');", True) 
End If 

これは妥当なアプローチであり、Ajaxリクエストが互いにブロックすることはありませんか?あるいは、長時間実行されているリクエストを自分の世界で別々に実行する別の方法があります。それは、それが暮らしているページの応答性を妨げることはありませんか?私はIFrameを試すことを検討しています。

ありがとうございます!

答えて

2

私はどのようにRadAjaxPanelが動作するのか分かりませんが、私はあなたがASP.NETのセッションロックシステムに当たっていると思います。

既定では、ASP.NETで同じセッションで2つの同時要求を実行することはできません。 8-10秒かかる長いリクエストは、すべての後続リクエストが終了するまでブロックされます。そのため、最初のリクエストが完了するまでPage_Load()に到達しません。

ページのEnableSessionState属性を調整してロックを無効にすることができます。詳細については

はこの記事を参照してください。

I just discovered why all ASP.Net websites are slow, and I am trying to work out what to do about it

1

ブラウザ開発ツールを起動します - > [ネットワーク]タブ(通常はF12キーを使用)、「保留」(または類似したもの)とのリクエストをチェック状態。任意の(長時間実行可能な)リクエストがある場合、この問題は、セッション状態が有効なときに同時リクエストをブロックすることによって発生する可能性があります。この問題がなぜ発生するのか、関連する内部ASPについては、以下のリソースを参照してください。NET詳細:

Why can’t I execute two requests from the same session simultaneously for an ASP.NET application?

ASP.NET Session State Overview - Concurrent Requests and Session State

I just discovered why all ASP.Net websites are slow, and I am trying to work out what to do about it

もしそうなら、このページでセッション状態を無効にする必要があるかもしれない:

<%@ Page ... EnableSessionState="False" %> 

やアプリケーション全体のレベル:

を使用して、別の状態(State Overview - Alternatives)または別の方法を使用してください。

関連する問題