ページが読み込まれると、そのユーザーコントロールのグリッドに表示されている検索結果を表示するために、ページのユーザーコントロールの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を試すことを検討しています。
ありがとうございます!