2011-08-22 46 views
0

我写了一段代码,我生成一个报告,并在同一按钮下生成.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(); 

上述代码执行后,我无法看到我的报告在字面控制我fo产生了什么?我应该怎么做?

回答

1

你不能在单个页面上做你想做的事情。您试图告诉浏览器它正在加载的页面既是应该下载的文件,也是应该正常显示的一组单独的内容。它只能执行其中的一个,这就是为什么当您评论/取消注释Response.End行时,您会得到这种行为或行为。

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

这里是使它看起来像它做你想要的东西的一种可能的方式:

  1. 使您的代码来响应一个查询字符串变量,它告诉是否输出到文字,或在运行代码您的generate941()方法。
  2. 显示普通页面(输出到Literal),但在页面上包含一个隐藏的iframe,该页面将指向具有强制下载的querystring变量的同一页面。

喜欢的东西:

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

看看你是否走线发生了什么:HttpContext.Current.Response.End();

,如果你的页面生命周期的渲染阶段之前到Response.End调用,它不会使您的任何内容。

+0

还是一样的问题,如果我未评论该功能,我能够看到我的报告,但与该代码执行我无法看到报告 – Dotnet

+0

在字面控制当你基本上想要返回2个响应时,1显示报告,2显示下载文件。这不会很遗憾,因为每个请求只能返回1个响应。最好的方法是在加载客户端代码并下载文件后触发第二个请求 –

相关问题