为什么我无法在生成文件时看到我的文字控件

时间:2011-08-22 08:07:51

标签: c# asp.net

我写了一段代码,我生成一个报告,并在同一个按钮下以.txt格式生成输出文件。但我无法看到我的文字控制,为什么会发生?

这是我的示例代码:

xmlpath = Server.MapPath("~/WebClientXslt/");
string newxslt = "941Report";
string x = Server.MapPath("~/WebClientXslt/" + newxslt + ".xsl");
string y = (xmlpath + "Testdo.xml");
USAReport.XmlTransformation xmltran = new USAReport.XmlTransformation();
xmltran.Transform(y, x);
//  XsltArgumentList XSLTArgs;
System.IO.StringWriter sw = new System.IO.StringWriter();
XslCompiledTransform xslTrans = new XslCompiledTransform();
XslTrans.Load(x);
XmlDocument xDoc = new XmlDocument();
xDoc.Load(y);
returnhtml = ConvertXML(xDoc, x, new XsltArgumentList());
//Response.Write(returnhtml);
ltReport.Visible = true;
ltReport.Text = returnhtml;

在此之后我写了一些代码来为用户生成一个txt文件,如下所示:

oCPyResults.generate941();

我在该函数中按如下方式编写代码:

HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=" + FileName + "");
HttpContext.Current.Response.ContentType = "application/text";
HttpContext.Current.Response.WriteFile(strPath);
HttpContext.Current.Response.End();

执行上面的代码后,我无法在我的表单上看到我的报表中的报表生成该怎么办?

2 个答案:

答案 0 :(得分:2)

如果您采取行动,请看看会发生什么:HttpContext.Current.Response.End();

如果您在页面生命周期的呈现阶段之前调用Response.End,它将不会呈现您的任何内容。

答案 1 :(得分:1)

您无法在单个页面上执行您要执行的操作。您试图告诉浏览器它正在加载的页面既是应该下载的文件,也是应该正常显示的单独内容集。它只能执行其中一个,这就是为什么在注释/取消注释Response.End行时获得这两个/或行为的原因。

您的问题的任何解决方案都将涉及两个请求:一个用于显示的页面,另一个用于提示“另存为”对话框以下载txt文件。

这是让SEEM像你正在做的一样的可能方式:

  1. 让代码响应一个querystring变量,该变量告诉它是否输出到Literal,或者运行generate941()方法中的代码。
  2. 显示正常页面(输出到Literal),但在页面上包含一个隐藏的iframe,它将指向同一页面,其中包含将强制下载的querystring变量。
  3. 类似的东西:

    <iframe src="/myreportpage.aspx?download=y" style="display:none" ></iframe>