2012-09-05 53 views
3

我有按鈕頁面,我想通過異步的cliking按鈕加載數據2個數據網格。ASP.NET服務器不處理頁面異步

這是網頁的代碼,使用jQuery作出其他2頁,將產生HTML我電話。

<%@ Page Title="" Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="Test.aspx.cs" Inherits="Solutions_CashCenter_StockManagement_Test_Test" %> 
<asp:Content ID="Content2" ContentPlaceHolderID="cphCenter" Runat="Server"> 
<style type="text/css"> 
    #wait { 
    position:absolute; 
    top:0px; 
    right:10px; 
    width:200px; 
    z-index:1000; 
    vertical-align:middle; 
    text-align:center; 
    background: #febf00; 
    display:none; 
} 
</style> 
<script src='<%= ResolveUrl("../../../../Scripts/jquery-1.4.1.js") %>' type="text/javascript"></script> 
<script type="text/javascript"> 
    $(function() { 
     $('#wait') 
     .ajaxStart(function() { $(this).show(); }) 
     .ajaxStop(function() { $(this).hide(); }); 

     $('input:button').live('click', loadData); 
    }); 

    function loadData() { 
     $.get("Source.aspx", {}, 
     function (data) { 
      $('#a1').html(data); 
     }, 
     "html"); 

     alert('This alert is asynchronous (1st)'); 

     $.get("Source2.aspx", {}, 
     function (data) { 
      $('#a2').html(data); 
     }, 
     "html"); 

     alert('This alert is asynchronous (2nd)'); 
    } 
</script> 
<div id="test13"> 
    <input type="button" id="btnLoad" value="Load" /> 
</div> 
<div id="a1"></div> 
<div id="a2"></div> 
<div id="wait">Please wait <img src="ajax-loading.gif" /></div> 
</asp:Content> 

然後我有2個aspx頁面,Source1.aspx和Source2.aspx。它們只包含一個gridDataView和OnLoad事件中的少量代碼。

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Source.aspx.cs" Inherits="Solutions_CashCenter_StockManagement_Test_Source" %> 
<form runat="server"> 
<cc1:GridDataView runat="server" ID="gridTest" > 
</cc1:GridDataView> 
<asp:SqlDataSource ID="dsTest" runat="server" ConnectionString="<%$ ConnectionStrings:WebPortalConnectionString %>" 
    ProviderName="<%$ ConnectionStrings:WebPortalConnectionString.ProviderName %>"> 
</asp:SqlDataSource> 
</form> 

服務器端:

Thread.Sleep(5000); 
dsTest.SelectCommand = "SELECT 'test1', 'test2', 'test3'"; 
this.gridTest.DataSourceID = "dsTest"; 
this.gridTest.DataBind(); 

與同爲第二頁,但與網格不同的數據。

我有結果是,這兩個警報發生一次,但網格是一個加載後一個,那就是5秒後第一次出現網格,然後接連5秒第二個appers。 這就是服務器並沒有實際地同時處理它們。

我在做什麼錯了,我應該如何組織所有的工作,我需要什麼?

回答

4

發生這種情況是因爲會話鎖定了頁面讀取。
因此,當一個頁面加載時,會話鎖定所有其餘的請求,直到完成併發送頁面。

爲了使它工作,你需要乙醚禁用不是由默認的會話鎖定對這個頁面的會議,醚使用的處理程序。

相關問題:

Trying to make Web Method Asynchronous
Web app blocked while processing another web app on sharing same session
What perfmon counters are useful for identifying ASP.NET bottlenecks?
Replacing ASP.Net's session entirely

+0

你是什麼意思下的 「頁面加載」?我沒有加載頁面,但做了一個Ajax請求 –

+0

@VitaliiKorsakov ajax請求是在客戶端上異步加載頁面。你仍然加載一個頁面 - 我說的是在服務器上處理 - 而不是在客戶端瀏覽器上。由於會話鎖定,服務器上的處理被阻止。 – Aristos

+0

@VitaliiKorsakov爲此頁面禁用會話,並且您看到它按預期工作。 – Aristos