我有一个旧的MVC 1.0应用程序,我正在努力解决相对简单的问题。
我有步骤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});
但文件未下载。建议欢迎并提前感谢。
答案 0 :(得分: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");
}
答案 1 :(得分:2)
为什么选择RedirectToAction?你可以从SomeImporter动作返回File,只需将SomeImporter的返回类型更改为FileContentResult。