2011-09-14 29 views
2

我想從一個文本框中創建一個csv文件,然後將其發送給用戶。這是到目前爲止我的代碼:在asp.net中響應一個csv文件

Response.Clear(); 
      Response.ContentType = "text/csv"; 
      Response.AppendHeader("Content-Disposition", 
       string.Format("attachment; filename={0}", DateTime.Now)); 

      Response.Write(TextBox_Data.Text); 
      Context.Response.End(); 

什麼是發送是一個空的XML文件,我從來沒有嘗試過與前一個文件響應,我不知道爲什麼它這樣做?

我自己也嘗試沒有工作如下:

var writer = File.CreateText("C:\\file.csv"); 
      writer.WriteLine(TextBox_Data.Text); 

      Context.Response.Clear(); 
      Context.Response.AppendHeader("content-disposition", "attachment; filename=" + DateTime.Now + ".csv"); 
      Context.Response.ContentType = "text/csv"; 
      Context.Response.Write("C:\\file.csv"); 
      Context.Response.Flush(); 
      Context.Response.End(); 

讓我知道,如果你有答案:)

+0

您試圖從用戶放入文本框中創建一個CSV文件,然後通過電子郵件將其發送給用戶,或讓用戶自動下載它?你能否給我們更多的背景知道這個代碼以外的方式和原因? –

+0

嘗試寫入不同的路徑。也許到你的個人資料路徑。寫給你的根是危險的。 – ApolloSoftware

+0

事實上,我試圖從多行文本框中製作一個可下載的CSV文件:)其實我不在乎將文件放在我的驅動器上,我只是想要一個可下載的CSV文件,以及來自文本框的文本。 –

回答

6

下面的代碼爲我工作。您可能會錯過一個文件擴展名。

Response.Clear(); 
Response.ContentType = "text/csv"; 
Response.AppendHeader("Content-Disposition", 
       string.Format("attachment; filename={0}.csv", DateTime.Now)); 
Response.Write(TextBox_Data.Text); 
Context.Response.End(); 
+0

請記住,這段代碼不會處理像轉義字符這樣的事情,但我認爲這就是你的期望。 – joshb

+0

ahh ... I寫這樣的擴展(「attachment; filename = {0}」,DateTime.Now +「。csv」)); 這從我的家用電腦完美的作品,非常感謝! –

2

只是一個關於到Response.End使用()對joshb的回答補充:

MSDN確實not recommend非錯誤的情況下使用Response.End(),並在某些情況下,它實際上可以導致客戶端丟失一些數據。

在我的情況下,有時下載的CSV將失去最後一行的最後一個字節,所以我刪除了Response.End()和使用

HttpContext.Current.ApplicationInstance.CompleteRequest() 

代替,我不得不重寫頁面的Render(HtmlTextWriter writer)方法不寫什麼根據請求,因爲csv已經寫好了。

public class PageBase : Page 
{ 
    private bool performRegularPageRender = true; 

    protected override void Render(HtmlTextWriter writer) 
    { 
     if (performRegularPageRender) 
      base.Render(writer); 
    } 

    public void SkipRegularPageRendering() 
    { 
     performRegularPageRender = false; 
    } 
} 

更多信息/學分: msdn blog; Is Response.End() considered harmful?; PostBack and Render Solutions? Overrides