【问题标题】:ASP.NET Server does not process pages asynchronouslyASP.NET 服务器不异步处理页面
【发布时间】:2012-08-30 08:31:51
【问题描述】:

我有一个带按钮的页面,我想通过单击按钮异步加载 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 秒后出现。 那就是服务器实际上并没有同时处理它们。

我做错了什么,我应该如何组织所有人按我的需要工作?

【问题讨论】:

    标签: asp.net jquery asynchronous webforms


    【解决方案1】:

    这是因为会话锁定了页面读取。
    因此,当一个页面正在加载时,会话会锁定所有其余请求,直到完成并发送页面。

    要使其正常工作,您需要 ether 禁用此页面上的会话,ether 使用默认情况下没有会话锁定的处理程序。

    相关问题:

    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

    【讨论】:

    • “页面加载”是什么意思?我没有加载页面,但是做了ajax请求
    • @VitaliiKorsakov ajax 请求是在客户端异步加载页面。你仍然加载一个页面——我所说的是在服务器上处理的——而不是在客户端浏览器上。由于会话锁定,服务器上的处理被阻止。
    • @VitaliiKorsakov 禁用此页面的会话,您会看到它按预期工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-21
    • 1970-01-01
    相关资源
    最近更新 更多