Вопрос по asp.net, asynchronous, jquery, webforms – ASP.NET Server не обрабатывает страницы асинхронно

3

У меня есть страница с кнопкой, и я хочу загрузить 2 сетки данных с данными асинхронно, нажав кнопку.

Это код страницы, я использую 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 секунд. То есть сервер фактически не обрабатывает их одновременно.

Что я делаю не так и как мне все организовать, чтобы работать так, как мне нужно?

Ваш Ответ

1   ответ
4

Это происходит потому, что сеанс блокирует чтение страницы.
Поэтому, когда загружается одна страница, сеанс блокирует все остальные запросы до завершения и отправляет страницу.

Чтобы это работало, вам нужен эфир, чтобы отключить сеанс на этих страницах, эфир использует обработчик, который по умолчанию не имеет блокировки сеанса.

Относительные вопросы:

Попытка сделать веб-метод асинхронным
Веб-приложение заблокировано при обработке другого веб-приложения при совместном использовании того же сеанса
Какие счетчики perfmon полезны для выявления узких мест ASP.NET?
Полная замена сессии ASP.Net

@VitaliiKorsakov Отключите сеанс для этих страниц, и вы увидите, что он работает так, как вы ожидаете.
Что вы имеете в виду под "загрузкой страницы"? Я не загрузил страницу, но сделал запрос ajax Vitalii Korsakov
@VitaliiKorsakov Ajax-запрос - это асинхронная загрузка страницы на клиенте. Вы по-прежнему загружаете страницу - то, о чем я говорю, обрабатывается на сервере, а не в клиентском браузере. Обработка на сервере заблокирована из-за блокировки сеанса.

Похожие вопросы