Ответ csv-файлом в asp.net - PullRequest
       20

Ответ csv-файлом в asp.net

3 голосов
/ 14 сентября 2011

Я пытаюсь создать 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();

Дайте мне знать, если у вас есть ответ:)

Ответы [ 2 ]

7 голосов
/ 14 сентября 2011

Следующий код работал для меня.Возможно, вам просто не хватает расширения файла.

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();
2 голосов
/ 18 июля 2013

Просто дополнение к ответу joshb относительно использования Response.End ():

MSDN не рекомендует использование 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 ; Является ли Response.End () вредоносным? ; Решения PostBack и рендеринга?Заменяет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...