3

我试图弄清楚如何让 ASP.net MVC 4 在长时间运行的操作期间将数据发送回浏览器。因为我以前从未这样做过,所以我从一个简单的例子开始:

public void Index()
{
    Response.Write("<p>Hello, world! Counting to 5!</p>");
    for (int i = 0; i < 5; i++)
    {
        Thread.Sleep(1000);
        Response.Write("<p>" + i + "</p>");
        Response.Flush();
    }
}

我认为这段代码应该立即发送“你好,世界!数到 5!” 到浏览器,然后每秒发送一位,直到达到五位。

但是,当我运行这段代码时,它需要五秒钟,并且所有文本都会立即输出。

我认为 Response.Flush() 方法应该允许您以增量方式将数据发送到浏览器。

我怎样才能使这项工作?

4

1 回答 1

5

我找到了我的问题的答案。

首先,如果 Internet Explorer 看不到文档是有效的 HTML,它似乎不会流式传输文本。我添加了代码来围绕我的数据打印出一个准系统 HTML 页面,这似乎使它工作。

另一位作者在这里写道:http ://encosia.com/easy-incremental-status-updates-for-long-requests/ Internet Explorer 将自动缓冲输入的前 256 个字符,因此建议放入 256 个字符的 throw-一开始就没有数据,但这似乎对我正在使用的版本(IE 10)没有影响。

最后,我只数到四,因为我差了一个;-)

这是我的工作代码:

public void Index()
{
    Response.Write("<!DOCTYPE html><html><head><title>Test</title></head><body>");

    Response.Write("<!--");
    Response.Write(new string('*', 256));            
    Response.Write("-->");
    Response.Flush();

    Response.Write("<p>Hello, world! Counting to 5!</p>");
    for (int i = 1; i <= 5; i++)
    {
        Response.Flush();
        Response.Write("<p>" + i + "</p>");                
        Thread.Sleep(1000);
    }
        Response.Write("</body></html>");
}
于 2013-10-18T19:46:35.380 回答