1

IQueryableインターフェイスからすべてのデータを出力する基本的なMvcScaffoldingプロジェクトへのリンクを追加しようとしています。コントローラーはScaffold Controller Sales -RepositorySaleクラスで構築されており、通常とは異なるものはなく、いくつかの文字列といくつかの整数があります。プロジェクトのすべてが期待どおりに機能します。

私が見つけた投稿から、LINQtoCSVは私にとって可能な解決策である可能性があります(http://www.codeproject.com/Articles/25133/LINQ-to-CSV-library)。残念ながら、何を追加すればよいかわかりません。/Sales/のインデックスページに/Sales/ CSV /を指すリンクがある場合、ユーザーに「ダウンロードまたは開く」というプロンプトを表示するにはどうすればよいですか。

Web APIの構築方法を説明するこのページ(http://www.asp.net/web-api/overview/formats-and-model-binding/media-formatters)も見ましたが、MVC4を使用できません。会社の基準。

私が現在持っているコード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.NETMVCのFileResultを介してファイルを作成して返す方法も参照してください。

于 2012-05-15T19:20:23.363 に答える