csv文件没有从asp.net的铬浏览器下载c#app
问题描述:
即时通讯使用下面的代码通过http请求发送一个csv文件。代码运行良好,但文件不下载客户端机器上,不保存为菜单,什么都没有出现。我用于另一个报告的相同代码,它工作正常,文件也被下载。我在本地主机上运行项目。但不是按钮btnGenerateReport。csv文件没有从asp.net的铬浏览器下载c#app
protected void btnGenerateReport_Click(object sender, EventArgs e)
{
DataTable dt = new DataTable();
MHSProgressNotesBL oMHSProgressNote = new MHSProgressNotesBL();
int ClientId = Convert.ToInt32(ddlClients.SelectedValue);
int LocationId = Convert.ToInt32(ddlLocations.SelectedValue);
int PractitionerId = Convert.ToInt32(ddlPractitioner.SelectedValue);
dt = oMHSProgressNote.FetchBillingReport(LocationId, ClientId, PractitionerId, Convert.ToDateTime(txtNoteStartDate.Text), Convert.ToDateTime(txtNoteEndDate.Text));
WriteToCSV(dt);
}
private void WriteToCSV(DataTable dt)
{
try
{
string attachment = "attachment; filename=ClientRoster.csv";
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.ClearHeaders();
HttpContext.Current.Response.ClearContent();
HttpContext.Current.Response.AddHeader("content-disposition", attachment);
HttpContext.Current.Response.ContentType = "text/csv";
//HttpContext.Current.Response.AddHeader("Pragma", "public");
WriteColumnName(dt);
foreach (DataRow clientdata in dt.Rows)
{
WriteUserInfo(clientdata);
}
HttpContext.Current.Response.End();
//HttpContext.Current.ApplicationInstance.CompleteRequest();
}
catch (Exception e)
{ }
}
private void WriteColumnName(DataTable dt)
{
string columnNames = "";
// Write Header row
foreach (DataColumn item in dt.Columns)
{
if (item.ColumnName.Contains(','))
{
columnNames += "\"" + item.ColumnName + "\"";
}
else
{
columnNames += item.ColumnName + ",";
}
}
columnNames = columnNames.TrimEnd(',');
HttpContext.Current.Response.Write(columnNames);
HttpContext.Current.Response.Write(Environment.NewLine);
}
private void WriteUserInfo(DataRow clientDataRow)
{
StringBuilder stringBuilder = new StringBuilder();
foreach (var item in clientDataRow.ItemArray)
{
AddComma((string)(item == System.DBNull.Value ? "" : item.ToString()), stringBuilder);
}
HttpContext.Current.Response.Write(stringBuilder.ToString().TrimEnd(','));
HttpContext.Current.Response.Write(Environment.NewLine);
}
private void AddComma(string value, StringBuilder stringBuilder)
{
if (value.Contains('"'))
{
value = value.Replace(@"""", @"""""");
value = "\"" + value + "\"";
}
else if (value.Contains(','))
{
value = "\"" + value + "\"";
}
stringBuilder.Append(value);
stringBuilder.Append(",");
}
答
的代码是确定.........的主要问题是该按钮btnGenerateReport是一个更新面板。由于其误差在上升的内:从所述服务器接收的消息无法被解析。此错误的常见原因是,通过调用Response.Write(),响应筛选器,HttpModules或服务器跟踪已启用来修改响应时。 详细信息:在“客户,医师”附近解析错误。 将按钮放置在更新面板之外后,代码正常工作。
+0
是的,确切地说。你不能写入你有更新面板的区域。 – 2015-02-24 09:54:14
你确实需要重构代码。它的可维护性差,并且可能会导致问题 - 您应该有一个生成CSV输出或文件的函数,然后让调用者写入响应,因此所有内容都易于管理,而不是写入响应流的不同方法。这也将使您更容易针对您遇到和遇到的问题。 – 2015-02-24 09:53:07