ASP.NET:向用户显示后台进程状态

时间:2008-12-31 07:39:46

标签: asp.net

我有一个网页,它将从用户输入一个excel / CSV文件并从中读取数据并导入到DB.While插入每个记录。我只想显示有关插入到记录中的记录的详细信息。用户。(例如:A的客户详细信息正在添加...)

2 个答案:

答案 0 :(得分:4)

尝试此操作...将输出设置为无缓冲(Response.BufferOutput),并在页面中包含一些javascript,以便在您认为合适时更新UI。例如,它可能会更新完成百分比的SPAN或您正在处理的记录的详细信息。然后在您的服务器代码中输出< script>从Render覆盖调用Javascript函数的标记。确保在适当的时候调用Flush(),并在渲染后刷新基本代码...... JS函数调用应该在适当的时间发送并在客户端执行,从而产生更新页面。

例如......您的HTML页面可能如下所示:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title></title>
    <script type="text/javascript">
        function UpdateScreen(t) {
            document.getElementById('output').innerHTML = t;
        }
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <div id='output'></div>
    </div>
    </form>
</body>
</html>
<script type="text/javascript">
    UpdateScreen('hello');
</script>

您的代码隐藏将如下所示:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Threading;

namespace WebApplication1
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected override void Render(HtmlTextWriter writer)
        {
            Response.BufferOutput = false;

            base.Render(writer);
            Response.Flush();

            for (int i = 0; i < 10; i++)
            {
                Thread.Sleep(1000);
                Response.Write(string.Format("<script type='text/javascript'>UpdateScreen('{0}');</script>", i * 10));
                Response.Flush();
            }
        }
    }
}

答案 1 :(得分:0)

我知道这是一个老问题,它的主人很久以前就已经搬家了。无论如何:

建议的解决方案不适用于ASP.NET MVC。如果你问我,你不这样做,我会说这不是解决这个问题最干净的方法: