1

我面临以下问题:

我有一个控制器,可以说以下操作:

        [HttpGet]
        public ActionResult Index()
        {
            var viewModel = new IndexViewModel();

            return View("Index", viewModel);
        }



        [HttpPost]
        public void ExportToExcell(LeadsViewModel model)
        {
            // Export to excell code goes here
        }

问题如下:

用户使用此 URL 在索引页面上输入:/Controller/Index

然后用户将表单提交到 Action ExportToExcel

数据导出到 Excel(文件下载),没关系。

URL 变为 /Controller/ExportToExcell

然后,当我单击“Enter”时,我将转到 /Controller/ExportToExcell 但使用 GET 并且当然会遇到 Page Not Found,问题是如何在 MVC 中正确处理此问题

4

3 回答 3

4

不要 void用作您的帖子操作的返回类型,请使用ActionResult

[HttpPost]
public ActionResult ExportToExcell(LeadsViewModel model)
{
   // Export to excell code goes here
   return RedirectToAction("Index");
}
于 2012-12-17T10:33:12.137 回答
2

我相信您的问题是您没有返回 FileResult,浏览器会将您重定向到您的帖子路径。现在无法测试它,但我相信以下应该有效。

[HttpPost]
public ActionResult ExportToExcell(LeadsViewModel model)
{
   // Generate the Excel file into a MemoryStream for example

   // Return a FileResult with the Excel mime type
   return File(fileStream, "application/vnd.ms-excel", "MyExcelFile.xls");
}

检查FileResultController.File以获取更多详细信息。

作为说明,我不完全确定这是否是 Excel 文件的 MIME 类型,但如果您说您已经在下载该文件,那么您可能已经拥有它:)

于 2012-12-17T10:53:35.650 回答
0

您必须返回 ActionResult 而不是 void。

 public ActionResult ExportToExcel(PagingParams args)
    {
        var data = new StudentDataContext().Student.Take(200).ToList();
        return data.GridExportToExcel<Student>("GridExcel.xlsx", ExcelVersion.Excel2007, args.ExportOption);
    }

请查看链接:导出操作

于 2012-12-17T12:45:21.760 回答