3

比較的単純なものに苦労している古い MVC 1.0 アプリケーションがあります。

  1. ユーザーがファイルをアップロードできるようにするビューがあります。
  2. サーバー側の処理が続行されます。
  3. 最後に、新しいファイルが生成され、クライアントのマシンに自動的にダウンロードされます。

ステップ1と2が機能しています。最後のステップが機能しません。これが私のコントローラーです:

[AcceptVerbs(HttpVerbs.Post)]
public ViewResult SomeImporter(HttpPostedFileBase attachment, FormCollection formCollection, string submitButton, string fileName
{
    if (submitButton.Equals("Import"))
    {
        byte[] fileBytes = ImportData(fileName, new CompanyExcelColumnData());
        if (fileBytes != null)
        {
            RedirectToAction("DownloadFile", "ControllerName", new { fileBytes = fileBytes});
        }
        return View();
    }
    throw new ArgumentException("Value not valid", "submitButton");
}

public FileContentResult DownloadFile(byte[] fileBytes)
{
    return File(
                fileBytes,
                "application/ms-excel",
                string.Format("Filexyz {0}", DateTime.Now.ToString("yyyyMMdd HHmm")));
}

コードは次のように実行されます。

RedirectToAction("DownloadFile", "ControllerName", new { fileBytes = fileBytes});

しかし、ファイルはダウンロードされません。提案を歓迎し、事前に感謝します。

4

2 に答える 2

4

ActionResultアクションの出力の最も抽象的なクラスであるため、を返すようにしてください。ViewResultは、ViewまたはPartialViewを返すように強制するため、Fileを返すと、暗黙的な変換タイプに関する例外が発生します。

[HttpPost]
public ActionResult SomeImporter(HttpPostedFileBase attachment, FormCollection formCollection, string submitButton, string fileName
{
    if (submitButton.Equals("Import"))
    {
        byte[] fileBytes = ImportData(fileName, new CompanyExcelColumnData());
        if (fileBytes != null)
        {
            return File(
                fileBytes,
                "application/ms-excel",
                string.Format("Filexyz {0}", DateTime.Now.ToString("yyyyMMdd HHmm")));
        }
        return View();
    }
    throw new ArgumentException("Value not valid", "submitButton");
}
于 2013-02-07T01:02:16.140 に答える
2

なぜRedirectToActionなのですか?SomeImporterアクションからFileを返すことはできますか?SomeImporterの戻りタイプをFileContentResultに変更するだけです。

于 2013-02-07T01:05:53.597 に答える