MVC 4路由,获取/发布请求处理

时间:2012-12-17 10:26:46

标签: asp.net-mvc asp.net-mvc-4 asp.net-mvc-routing

我遇到了以下问题:

我有一个控制器,让我们说出以下行动:

        [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中处理这个问题

3 个答案:

答案 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");
}

查看FileResultController.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