【问题标题】:How do i save the output of LinqToCSV on Client Side in ASP.NET如何在 ASP.NET 的客户端保存 LinqToCSV 的输出
【发布时间】:2023-03-09 01:04:01
【问题描述】:

我目前能够将列表保存到服务器上的 CSV 文件中,如下面的代码所示。但是,我希望 ASP.NET 应用程序通过文件保存对话框提示用户并将其保存在他的客户端系统中。因此,我在将列表绑定到 GridView 的页面的“导出到 CSV”按钮单击中有此代码。但是,此代码在 IE 中运行时会引发 JavaScript 错误,复制如下。这有什么问题?响应应该在单独的 ASPX 上吗?

 CsvContext cc = new CsvContext();
            string outputFileName = string.Format("D:\\Dashboard.csv", DateTime.Now);
            cc.Write(filteredListOfPerformanceDashboardSummary, outputFileName);
            HttpContext.Current.Response.Clear();
            HttpContext.Current.Response.ClearHeaders();
            HttpContext.Current.Response.ClearContent();
            HttpContext.Current.Response.AddHeader("content-disposition", outputFileName);
            HttpContext.Current.Response.ContentType = "text/csv";
            HttpContext.Current.Response.AddHeader("Pragma", "public");
            HttpContext.Current.Response.Write(cc.ToString());
            HttpContext.Current.Response.End();

我收到这个 IE 错误

Error: Sys.WebForms.PageRequestManagerParserErrorException: The message received from the server could not be parsed.

当我点击链接时,这里会出现错误

function Sys$WebForms$PageRequestManager$_endPostBack(error, executor, data) {
        if (this._request === executor.get_webRequest()) {
            this._processingRequest = false;
            this._additionalInput = null;
            this._request = null;
        }
        var handler = this._get_eventHandlerList().getHandler("endRequest");
        var errorHandled = false;
        if (handler) {
            var eventArgs = new Sys.WebForms.EndRequestEventArgs(error, data ? data.dataItems : {}, executor);
            handler(this, eventArgs);
            errorHandled = eventArgs.get_errorHandled();
        }
        if (error && !errorHandled) {
            throw error;
        }
    }

【问题讨论】:

  • 我觉得Ajax的UpdatePanel有问题。现在尝试重定向到没有 UpdatePanel 的新页面。

标签: c# asp.net linqtocsv


【解决方案1】:

您可以使用Responce.WriteFile

CsvContext cc = new CsvContext();
string outputFileName = string.Format("D:\\Dashboard.csv", DateTime.Now);
cc.Write(categoryList, outputFileName);  
Response.Clear();
Response.ContentType = "text/csv"; //or "application/csv" 
Response.AddHeader("Content-disposition", "attachment; filename=\"sample.csv" + "\"");
Response.WriteFile(outputFileName);
Response.Flush();
Response.End();

【讨论】:

  • 我尝试了你的建议。但我得到错误:Sys.WebForms.PageRequestManagerParserErrorException:无法解析从服务器收到的消息
  • 你能调试你的代码并找出错误发生在哪一行吗?
  • 我添加了错误码生成功能。它在 endPostBack
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-10
  • 2017-10-03
  • 1970-01-01
  • 2019-01-03
相关资源
最近更新 更多