c# - 从 Controller 下载文件 RedirectToAction()

标签 c# asp.net-mvc

我有一个旧的 MVC 1.0 应用程序,我正在为一些相对简单的事情而苦苦挣扎。

  1. 我有一个允许用户上传文件的 View 。
  2. 继续进行一些服务器端处理。
  3. 最后,生成一个新文件并自动下载到客户的机器上。

我已执行第 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/

相关文章:

C# 停止按钮在单击时获得焦点

c# - VSTO 插件表单关闭处理程序

asp.net-mvc - ASP.NET 使用 LINQ 处理 DB 表单

c# - Ajax.BeginForm 部分 View 替换整个页面

asp.net - 无法加载文件或程序集“System.Web.Mvc,版本=3.0.0.0,Elmah.MVC问题”

c# - Fluent NHibernate 解决方案结构 - 如何在 Web 应用程序/控制台应用程序的后端引用一次 DLL

c# - FakeItEasy 说 MustHaveHappened 没有发生......但确实发生了

C# - 时间格式的 DateTimePicker 在切换到下一个框时不关注小时值

asp.net-mvc - ASP.NET MVC + IIS7 + 火狐 : trailing slash in URL

asp.net-mvc - 使用 SQLite 将 ASP.NET MVC 应用程序部署到 Azure 网站