2011-08-22 72 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個響應。最好的方法是在加載客戶端代碼並下載文件後觸發第二個請求 –

相關問題