我遇到了以下问题:
我有一个控制器,让我们说出以下行动:
[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(文件已下载),没关系。
网址变为/ Controller / ExportToExcell
然后,当我点击“Enter”时,我将使用GET进入/ Controller / ExportToExcell 当然还有Page Not Found,问题是如何在MVC中处理这个问题
答案 0 :(得分:4)
请勿使用void
作为帖子操作的返回类型,请使用ActionResult
[HttpPost]
public ActionResult ExportToExcell(LeadsViewModel model)
{
// Export to excell code goes here
return RedirectToAction("Index");
}
答案 1 :(得分: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");
}
查看FileResult和Controller.File了解详情。
作为一个注释,我不完全确定这是否是Excel文件的mime类型,但是如果你说你已经在下载文件,那么你可能已经拥有它了:)
答案 2 :(得分: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);
}
请检查链接:Export Action