Asp.net mvc 4 导出到Excel和ModelBase

Asp.net mvc 4 导出到Excel和ModelBase,asp.net-mvc-4,entity-framework-5,export-to-excel,export-to-csv,Asp.net Mvc 4,Entity Framework 5,Export To Excel,Export To Csv,我的需求很简单——只需将MVC视图数据表导出到Excel即可。 为了将Razor MVC4视图导出到Excel,我搜索了许多不同的方法,发现这是一个很好的简单方法,但我有点被如何正确实现它所困扰,因为我不理解ModelBase的概念。我找到了几个使用此方法的示例,但无法让它们与我的解决方案一起工作 我试着按照上面的例子,并在下面创建了一个ActionResult,但我不明白我应该用什么来代替下面的“ModelBase”,因为它不喜欢这种语法 public ActionResul

我的需求很简单——只需将MVC视图数据表导出到Excel即可。 为了将Razor MVC4视图导出到Excel,我搜索了许多不同的方法,发现这是一个很好的简单方法,但我有点被如何正确实现它所困扰,因为我不理解ModelBase的概念。我找到了几个使用此方法的示例,但无法让它们与我的解决方案一起工作

我试着按照上面的例子,并在下面创建了一个ActionResult,但我不明白我应该用什么来代替下面的“ModelBase”,因为它不喜欢这种语法

        public ActionResult ExcelExport()
    {
       List<TrainingSwipe> viewModel = _db.TrainingSwipes
            .OrderBy(v => v.SwipeDateTime).ToList();
       return View(viewModel);
       return new ExcelResult<ModelBase>
           (
               ControllerContext,
               "Export.aspx",
               "ExcelExport",
               viewModel
           );
    }
public ActionResult ExcelExport()
{
列表视图模型=_db.TrainingSwipes
.OrderBy(v=>v.SwipeDateTime).ToList();
返回视图(viewModel);
返回新结果
(
ControllerContext,
“Export.aspx”,
“卓越出口”,
视图模型
);
}

最近我在MVC项目中做了很多Excel导出工作,并且一直在使用NPOI的Excel软件包。备选方案是EP Plus,我认为它是在NPOI之上构建的(我自己没有使用过)

至于模型库,我不完全确定那是什么,我怀疑是博主创建的某个抽象类,但这里有一个可能的解决方案

   public ActionResult Export()
        {
            List<MyModel> model = new List<MyModel>();

            MemoryStream stream = new MemoryStream();

            model = myServiceLayer.GetExportResults();

            DataSet ds = new DataSet();
            ds.Tables.Add(model.ToDataTable<MyModel>());

            try
            {
                stream = ExcelHelper.CreateExcelSheet(ds, ExcelHelper.ExcelType.Xlsx);
            }
            catch (Exception error)
            {
                ModelState.AddModelError("", error);
            }



            if (!ModelState.IsValid)
            {
                return View();
            }
            else
            {
                string exportName = "myexcelfile.xlsx";

                return File(stream.ToArray(), "application/vnd.ms-excel", exportName);
            }



        }
但我离题了。我构建了一个简单的ExcelHelper类,它将NPOI内容包装在引擎盖下,以执行所有Excel创建,然后您只需将文件作为FileResult返回即可

您可以在此处访问该项目:

如果您查看单元测试,您将看到这是如何工作的。但就在actionresult中使用它而言,这里有一些示例代码供您参考

   public ActionResult Export()
        {
            List<MyModel> model = new List<MyModel>();

            MemoryStream stream = new MemoryStream();

            model = myServiceLayer.GetExportResults();

            DataSet ds = new DataSet();
            ds.Tables.Add(model.ToDataTable<MyModel>());

            try
            {
                stream = ExcelHelper.CreateExcelSheet(ds, ExcelHelper.ExcelType.Xlsx);
            }
            catch (Exception error)
            {
                ModelState.AddModelError("", error);
            }



            if (!ModelState.IsValid)
            {
                return View();
            }
            else
            {
                string exportName = "myexcelfile.xlsx";

                return File(stream.ToArray(), "application/vnd.ms-excel", exportName);
            }



        }
public ActionResult导出()
{
列表模型=新列表();
MemoryStream stream=新的MemoryStream();
model=myServiceLayer.GetExportResults();
数据集ds=新数据集();
Add(model.ToDataTable());
尝试
{
stream=ExcelHelper.CreateExcelSheet(ds,ExcelHelper.ExcelType.Xlsx);
}
捕获(异常错误)
{
AddModelError(“,error);
}
如果(!ModelState.IsValid)
{
返回视图();
}
其他的
{
字符串exportName=“myexcelfile.xlsx”;
返回文件(stream.ToArray(),“application/vnd.ms excel”,exportName);
}
}
这是通过执行一些反射将类对象转换为数据集,然后将该数据导出到数据集,该数据集被馈送到excelhelper并将内容输出到流,然后将其作为文件结果传回

我实际上需要推动一个更新,它解决了我发现的几个小问题,但它在当前的形式下工作得非常好。如果您需要更多信息或帮助,请随时联系


编辑:我实际上刚刚将更新推到我的github项目中

Thx,我正在寻找一个简单的解决方案,希望修复几行代码并完成它,但如果没有,我可能最终会研究NPOI和您的解决方案。这不是问题。我自己也在寻找一个简单的解决方案,它不需要我做太多的编码来将数据放入电子表格,因此我的解决方案。
   public ActionResult Export()
        {
            List<MyModel> model = new List<MyModel>();

            MemoryStream stream = new MemoryStream();

            model = myServiceLayer.GetExportResults();

            DataSet ds = new DataSet();
            ds.Tables.Add(model.ToDataTable<MyModel>());

            try
            {
                stream = ExcelHelper.CreateExcelSheet(ds, ExcelHelper.ExcelType.Xlsx);
            }
            catch (Exception error)
            {
                ModelState.AddModelError("", error);
            }



            if (!ModelState.IsValid)
            {
                return View();
            }
            else
            {
                string exportName = "myexcelfile.xlsx";

                return File(stream.ToArray(), "application/vnd.ms-excel", exportName);
            }



        }