我有一个旧的 MVC 1.0 应用程序,我正在为一些相对简单的事情而苦苦挣扎。
- 我有一个允许用户上传文件的 View 。
- 继续进行一些服务器端处理。
- 最后,生成一个新文件并自动下载到客户的机器上。
我已执行第 1 步和第 2 步。我无法完成最后一步工作。这是我的 Controller :
[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});
但是文件没有下载。欢迎提出建议并提前致谢。
最佳答案
尝试返回ActionResult
,因为它是 Action 输出的最抽象类。 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");
}
关于c# - 从 Controller 下载文件 RedirectToAction(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14741625/