使用UpdateProgress的问题

我的ASP.NET页面上有一个按钮,它从我的数据库中获取一些数据并将其显示在gridview上。

这个过程需要一段时间,所以我想我会添加一个updateprogress AJAX控件。 现在,当我单击按钮时,updateprogress图像显示并且数据正在从我的数据库中成功获取(我从我的数据库中的一些日志中检查了这一点)。 但有两个问题:

(1)updateprogress图像仅显示约2分钟。 但我的buttonclick事件大约需要5分钟才能完成。 基本上,updateprogress甚至在我的任务完成之前就停止显示,这违背了它的目的。

(2)GridView没有显示出来。 如果我不使用scriptmanager / AJAX,它会正确显示。

有任何想法吗?

一些相关的代码片段:

代码文件部分:

 protected void btnGenerateReport_Click(object sender, EventArgs e) { FetchAccounts(); long startId = FetchAuditData(); AggregateAuditData(startId); dsAnalysisReport = GenerateDataSet(); if (dsAnalysisReport == null || dsAnalysisReport.Tables.Count == 0) lblErrorText.Text = "No Data Found for the input information"; else BindData(dsAnalysisReport); } public void FetchAccounts() { using (var sqlConnection = new SqlConnection(ConnectionString)) { sqlConnection.Open(); cmdstring = @"[spo_FetchAccounts]"; cmd = new SqlCommand(cmdstring, sqlConnection) { CommandType = CommandType.StoredProcedure }; cmd.CommandTimeout = 100000; cmd.Parameters.Add("@MaxActivationDate", SqlDbType.DateTime); cmd.Parameters["@MaxActivationDate"].Value = DateTime.Parse(txtStartDate.Text) - new TimeSpan(1, 0, 0, 0); cmd.ExecuteNonQuery(); sqlConnection.Close(); } } public long FetchAuditData() { using (var sqlConnection = new SqlConnection(ConnectionString)) { sqlConnection.Open(); cmdstring = @"[spo_GetComparisonData]"; cmd = new SqlCommand(cmdstring, sqlConnection) { CommandType = CommandType.StoredProcedure }; cmd.CommandTimeout = 100000; cmd.Parameters.Add("@StartDate", SqlDbType.DateTime); cmd.Parameters["@StartDate"].Value = txtStartDate.Text; cmd.Parameters.Add("@EndDate", SqlDbType.DateTime); cmd.Parameters["@EndDate"].Value = txtEndDate.Text; SqlParameter returnValue = new SqlParameter("@Return_Value", SqlDbType.BigInt); returnValue.Direction = ParameterDirection.ReturnValue; cmd.Parameters.Add(returnValue); cmd.ExecuteNonQuery(); long startId = long.Parse(cmd.Parameters["@Return_Value"].Value.ToString()); sqlConnection.Close(); return startId; } } private void AggregateAuditData(long startId) { using (var sqlConnection = new SqlConnection(ConnectionString)) { sqlConnection.Open(); cmdstring = @"[spo_ComparisonTable]"; cmd = new SqlCommand(cmdstring, sqlConnection) { CommandType = CommandType.StoredProcedure }; cmd.CommandTimeout = 100000; cmd.Parameters.Add("@StartId", SqlDbType.Int); cmd.Parameters["@StartId"].Value = startId; cmd.ExecuteNonQuery(); sqlConnection.Close(); } } public DataSet GenerateDataSet() { using (var sqlConnection = new SqlConnection(ConnectionString)) { sqlConnection.Open(); cmdstring = @"SELECT * FROM XAccounts"; cmd = new SqlCommand(cmdstring, sqlConnection); DataSet ds = new DataSet(); SqlDataAdapter da = new SqlDataAdapter(cmd); da.Fill(ds); sqlConnection.Close(); if (ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0) return ds; return null; } } private void BindData(DataSet ds) { BindReportGrid(Report, ds.Tables[0]); } private void BindReportGrid(GridView gridToBind, DataTable dataTableToBind) { gridToBind.DataSource = dataTableToBind; gridToBind.DataBind(); } 

根据问题(1),最有可能是ajax超时。 默认超时为90秒。 要增加使用ScriptManager的AsyncPostBackTimeout属性:

   

如果ajax调用超时,页面上的控件可能无法正常工作,因此增加超时可能也会解决问题(2)。

也许你想要这个: http : //www.codeproject.com/kb/Ajax/ModalUpdateProgress.aspx

替代文字

它适用于我,即使操作很长。

我在ASP.NET UpdateProgress上遇到了同样的问题。 我通过直接处理脚本管理器事件来修复它:

  

看起来您的网格位于“更新”面板之外,如果您使用的是更新面板,并且您的按钮位于更新面板内,并且网格位于更新面板之外,那么一切都将在服务器端发生,但您不会发现任何更改。 UI。

尝试将网格放在更新面板中。

将UpdateProgress移到UpdatePanel之外。