C# ASP.Net将列表导出到CSV

C# ASP.Net将列表导出到CSV,c#,asp.net,.net,jquery-mobile,C#,Asp.net,.net,Jquery Mobile,我有一个非常旧的asp.net应用程序,它使用C.net和JQuery Mobile,我需要添加一个功能:将数据列表导出到csv文件。到目前为止,我已经把UI的东西整理好了。我有一个jquery按钮,它在请求查询字符串中传递一个参数,以在页面加载时指示我们需要将数据导出到Excel。在页面加载事件中,我还有下面的C。不幸的是,当我在VisualStudio中使用Chrome或任何浏览器运行此代码时,没有收到保存csv文件的提示。当我使用IE运行它时,我得到以下错误: 中第2371行第4列的未处理

我有一个非常旧的asp.net应用程序,它使用C.net和JQuery Mobile,我需要添加一个功能:将数据列表导出到csv文件。到目前为止,我已经把UI的东西整理好了。我有一个jquery按钮,它在请求查询字符串中传递一个参数,以在页面加载时指示我们需要将数据导出到Excel。在页面加载事件中,我还有下面的C。不幸的是,当我在VisualStudio中使用Chrome或任何浏览器运行此代码时,没有收到保存csv文件的提示。当我使用IE运行它时,我得到以下错误:

中第2371行第4列的未处理异常

0x800a138f-Javascript运行时错误:无法获取未定义或空引用的属性“\u trigger”

我不确定我是否正确处理了response对象的所有内容

        if (Request.QueryString["isExportToExcelRequired"] == "true")
        {
            StringWriter sw = new StringWriter();
            sw.WriteLine("\"ItemID\",\"Description\",\"Price\"");

            if (MasterList.Count > 0)
            {
                for (int i = 0; i < MasterList.Count; i++)
                {
                    sw.WriteLine(string.Format("\"{0}\",\"{1}\",\"{2}\"",
                                               MasterList[i].item.ItemID,
                                               MasterList[i].item.ItemDesc,
                                               MasterList[i].P0
                                               ));
                }

                string fileName = string.Format("{0}_{1}", SubClassID, DateTime.UtcNow.ToString("dd-MM-yyyy"));

                // Write response. 
                Response.ClearContent();
                Response.AddHeader("content-disposition", "attachment;filename=" + fileName + ".csv");
                Response.ContentType = "text/csv";
                Response.Write(sw.ToString());
                Response.End();
            }
        }

我会用csvHelper。这是一个方便的图书馆。它从2009年就已经存在了,所以我想您的应用程序不会太老而无法从这个库中获益。下面是从列表转换为CSV的基本示例

您得到的错误是因为不应该为NULL的东西实际上是NULL。 在VisualStudio中运行它,让它抛出异常。检查调试器并找到空值,然后检查逻辑并发现为什么它没有设置为值

void Export()
{
    using (var stream = new MemoryStream())
    using (var reader = new StreamReader(stream))
    using (var writer = new StreamWriter(stream))
    using (var csv = new CsvWriter(writer))
    {

        foreach (var item in MasterList)
        {
            foreach (var field in item)
            {
                csv.WriteField(field);
            }
            csv.NextRecord();
        }
        writer.Flush();
        stream.Position = 0;

        reader.ReadToEnd().Dump();
    }
}

我会用csvHelper。这是一个方便的图书馆。它从2009年就已经存在了,所以我想您的应用程序不会太老而无法从这个库中获益。下面是从列表转换为CSV的基本示例

您得到的错误是因为不应该为NULL的东西实际上是NULL。 在VisualStudio中运行它,让它抛出异常。检查调试器并找到空值,然后检查逻辑并发现为什么它没有设置为值

void Export()
{
    using (var stream = new MemoryStream())
    using (var reader = new StreamReader(stream))
    using (var writer = new StreamWriter(stream))
    using (var csv = new CsvWriter(writer))
    {

        foreach (var item in MasterList)
        {
            foreach (var field in item)
            {
                csv.WriteField(field);
            }
            csv.NextRecord();
        }
        writer.Flush();
        stream.Position = 0;

        reader.ReadToEnd().Dump();
    }
}

按现有方式编写值的问题是,如果其中一个值包含逗号,会发生什么情况?我用于此的NuGet包是。我发现它的平均速度大约是CsvHelper的四倍


它甚至支持跨多行的列值,并具有一些其他高级功能。

以现有方式写入值的问题是,如果其中一个值包含逗号会发生什么?我用于此的NuGet包是。我发现它的平均速度大约是CsvHelper的四倍


它甚至支持跨多行的列值,并具有一些其他高级功能。

我能够通过使用Javascript函数在aspx页面中处理csv导出来实现这一点。解决方案如下所示:

在onclick事件中调用download_csv函数的按钮控件:

<button onclick="download_csv('<%= HttpUtility.JavaScriptStringEncode(csvExport)%>')">Download CSV</button> 

经过铬合金测试,它像冠军一样工作。不适用于IE,但我现在不太担心

我能够通过使用Javascript函数在aspx页面中处理csv导出来实现这一点。解决方案如下所示:

在onclick事件中调用download_csv函数的按钮控件:

<button onclick="download_csv('<%= HttpUtility.JavaScriptStringEncode(csvExport)%>')">Download CSV</button> 

经过铬合金测试,它像冠军一样工作。不适用于IE,但我现在不太担心

谢谢你的信息。我会看看csvHelper,也会看看我是否能找出什么是空的,不应该是空的。谢谢你的信息。我会看看csvHelper,看看我能不能找出什么是空的,不应该是空的。谢谢,乔纳森。我将研究解析器。幸运的是,对于这个小任务,我的数据将不会有逗号或任何其他特殊字符。我遇到的唯一问题是在浏览器中下载csv文件。从我的强类型列表中获取数据并将其写入流编写器正在工作。谢谢,Jonathan。我将研究解析器。幸运的是,对于这个小任务,我的数据将不会有逗号或任何其他特殊字符。我遇到的唯一问题是在浏览器中下载csv文件。从强类型列表中获取数据并将其写入流编写器是可行的。您使用的是过时的jQM版本。我想我找到了解决方案。我想我可以用一个简单的javascript函数在aspx页面中处理这个问题,而不是在C中的代码隐藏中这样做。我在我的应用程序中测试了这个例子,它很有效;我只需要用我的强类型列表数据替换数据数组,就可以了。您使用的是过时的jQM版本。我想我找到了解决方案。我想我可以用一个简单的javascript函数在aspx页面中处理这个问题,而不是在C中的代码隐藏中这样做。我在我的应用程序中测试了这个例子,它很有效;我只需要用我的强类型列表数据替换数据数组,就可以了。谢谢,奥马尔。我不知道该把解决方案放在哪里。谢谢,奥马尔。我不知道该把解决方案放在哪里。