1

我正在尝试添加一个指向基本 MvcScaffolding 项目的链接,该项目从 IQueryable 接口输出所有数据。控制器是用Scaffold Controller Sales -RepositorySale 类构建的,没有什么特别之处,只有几个字符串和一些整数。项目中的一切都按预期工作。

从我发现的帖子中,LINQtoCSV 对我来说可能是一个可能的解决方案(http://www.codeproject.com/Articles/25133/LINQ-to-CSV-library)。不幸的是,我不知道要添加什么。如果我在 /Sales/ 的索引页面上有指向 /Sales/CSV/ 的链接,如何提示用户“下载或打开”?

我还看到了这个页面(http://www.asp.net/web-api/overview/formats-and-model-binding/media-formatters),它讲述了如何构建 Web API,但我不能使用 MVC 4 per公司标准。

我目前拥有的代码SalesController.cs如下(错误[DirectoryNotFoundException: Could not find a part of the path 'C:\...\Sales\CSV\LINQtoCSV.CsvContext'.]):

    //
    // GET: /Sales/CSV/
    [Authorize]
    public FilePathResult CSV()
    {
        List<Sale> dataRows = saleRepository.All.ToList();

        CsvFileDescription outputFileDescription = new CsvFileDescription
        {
            SeparatorChar = '\t', // tab delimited
            //EnforceCsvColumnAttribute = false,
            FirstLineHasColumnNames = true, // no column names in first record
            FileCultureName = "en-US" // default is the current culture
        };
        CsvContext cc = new CsvContext();

        cc.Write<Sale>(dataRows,
            "output.csv",
            outputFileDescription);

        return File(cc.ToString(), "text/csv");
    }

编辑: 修改代码以从存储库创建列表并使用 File() 输出。

编辑: 这是我正在使用的修改后的代码。在模型中,我正在构建带有连接列表的字符串。控制器代码如下:

    [Authorize]
    public FileStreamResult CSV3()
    {
        MemoryStream output = new MemoryStream();
        StreamWriter writer = new StreamWriter(output);
        saleRepository.All.ToList().ForEach(s => writer.WriteLine(s.ToStringCSV));

        writer.Flush();
        output.Position = 0;

        return File(output, "text/csv", "report.csv");
    }
4

1 回答 1

0

也许您需要使用FileResult类?另请参阅如何在 ASP.NET MVC 中创建文件并通过 FileResult 返回它?

于 2012-05-15T19:20:23.363 回答