在html块准备就绪时呈现asp.net repeater(流式处理)

在html块准备就绪时呈现asp.net repeater(流式处理),asp.net,streaming,asynchronous,Asp.net,Streaming,Asynchronous,问题是提交大量报告。基本上,我们有很多数据可以在html报告中呈现(主要使用repeater或gridview)。碰巧的是,数据一开始很小,现在我们有很多数据。有很多这样的报告已经建立,所以完全重写不是一个选项。见鬼,企业甚至不允许我们分页数据。 现在,每次我们试图呈现一些报告时,服务器内存都会急剧增加。所以问题是——我们是否有办法将数据绑定到repeater,并在块准备好时将html流式传输到浏览器?通过这种方式,我们希望不会将所有数据一次带到AppServer中。我想我们将使用datarea

问题是提交大量报告。基本上,我们有很多数据可以在html报告中呈现(主要使用repeater或gridview)。碰巧的是,数据一开始很小,现在我们有很多数据。有很多这样的报告已经建立,所以完全重写不是一个选项。见鬼,企业甚至不允许我们分页数据。
现在,每次我们试图呈现一些报告时,服务器内存都会急剧增加。所以问题是——我们是否有办法将数据绑定到repeater,并在块准备好时将html流式传输到浏览器?通过这种方式,我们希望不会将所有数据一次带到AppServer中。我想我们将使用datareader或其他东西来获取部分数据并将其呈现给浏览器。有什么建议、链接、想法吗?

在这种情况下,请回复。Write是您的朋友。不幸的是,您将不得不放弃数据绑定和中继器的细节。这里有一个链接

您有一些选择,但不能使用中继器来完成

ASP.NET不会输出在ASPX中定义的HTML,直到它命中。在此之前,页面几乎可能会发生任何事情(在Page_Init、Page_Load等中):它可能会向页面添加或删除控件,可能会绑定数据源,等等。。所以现在还没有办法知道该向客户发送什么

一个选项是使用AJAX从客户机构建报告:首先加载HTML,然后通过对服务器的增量调用对其进行修改,直到用完所有报告数据。这会让你把你的报告分解成你想要的任何大小的块,但它可能会变得相当复杂。(另一方面,可能有人已经建立了一个控件来实现这一点。)

另一个选项是控制HTML生成,并在代码隐藏类中手动编写整个页面(而不是使用漂亮、易于阅读的.aspx模板)。要查看此操作,请创建一个完全空的.aspx(除了
@Page
声明之外),并将其放入其
Page\u Load
方法中:

protected void Page_Load(object sender, EventArgs e) 
{
    Response.Write("<html><body><ul>");

    // this could be iterating a data reader
    for(int i=0; i<5; i++) 
    {
        Response.Write("<li>Item " + i.ToString() + "</li>");

        // you might tweak your buffer settings instead of flushing on
        // each write - this is just for demonstration purposes
        Response.Flush();

        // this just dramatizes the fact that it's streaming
        // by adding a two-second delay
        System.Threading.Thread.Sleep(2000);
    }
    Response.Write("</ul></body></html>");
}
受保护的无效页面加载(对象发送方,事件参数e)
{
响应。写入(“
    ”); //这可能是迭代数据读取器
    对于(inti=0;i,这将是JQuery无限滚动的一个有趣的解决方案

    因为,您不允许执行分页,您可以滚动并抛出记录,只有这样才能从数据库中获取并显示记录。问题之一是您需要使用JavaScript向GridView控件动态添加行


    就像Google Reader一样,你可以向下滚动浏览订阅源,然后加载所有订阅源。

    谢谢你的链接。我一直怀疑你必须超越asp.net控件才能处理严重的负载。这正好证实了这一点。基本上,你和Jeff的回答指向了我应该采取的总体方向,我肯定会这样做开始思考这些问题。我将探索无限卷轴。我在少数几个网站上看到了这些实现,这看起来很有希望。非常感谢。我一直在思考这些问题。不管怎样,它在php和其他web堆栈中都是这样工作的。谢谢您的时间。