0

我基本上已将以下内容放入我的按钮单击偶数处理程序中,它主要工作但它也在 CSV 文件中写出页面的所有 html。有没有办法阻止这种情况?

                    StringBuilder sb = new StringBuilder();
                sb.AppendLine("pkey,epsn,Cal. Date (UTC),Va Mult, Vb Mult, Vc Mult,Ia Mult, Ib Mult, Ic Mult, Ia Phase, Ib Phase, Ic Phase, CT Rating, CT Type, Cal By");
                Response.ContentType = "application/csv";

                Response.AddHeader("content-disposition", "attachment; filename=EPSn.csv");
                Response.Write(sb.ToString());
                foreach (DataRow row in dt.Rows)
                {
                    sb = new StringBuilder((string)row[0]);
                    for (int i = 1; i < dt.Columns.Count; i++)
                    {
                        if (row[i] is DBNull)
                            sb.Append(",NULL");
                        else if (i == 2)
                            sb.Append("," + new DateTime((long)row[i]).ToString("G"));
                        else
                            sb.Append("," + row[i].ToString());

                    }
                    sb.AppendLine();
                    Response.Write(sb.ToString());
4

4 回答 4

2

在开始编写响应之前添加。

Response.Clear();

在代码末尾添加以下内容。

Response.Flush();
Response.End();

感谢以下关于结束回复的最佳方式的问题。

HttpResponse.End vs HttpResponse.Close vs HttpResponse.SuppressContent

于 2012-06-26T21:06:04.483 回答
1

我认为您还应该在此代码之后添加 Response.End() :这样就不会向响应流中添加更多响应。这可能会将页面输出添加到您的 CSV。

sb.AppendLine();
Response.Write(sb.ToString());

Response.End();
于 2012-06-26T21:03:20.927 回答
0

有没有办法阻止这种情况?

您可以清除响应:

Response.Clear();
Response.ClearContent();

也请停止滚动您自己的 CSV 解析器。这绝对是可怕的,我看到人们一遍又一遍地继续犯这个错误。

于 2012-06-26T20:51:53.350 回答
0

我不知道您是否要避免使用 excel,但是此代码段适用于我的代码:

    void InitAttachment()
    {
        string attachment = "attachment; filename= " + this.FileName;
        Response.ClearContent();
        Response.AddHeader("content-disposition", attachment);
        Response.ContentType = "application/excel";
    }
于 2012-06-26T20:57:30.647 回答