MVC中ActionResult可以自定义来实现,平时我们可以返回如ActionResult,ContentResult,JsonResult等其实返回值可以都设置成ActionResult,因为ConentResult,JsonResult等都是继承ActionResult。这次我们来自定义一个ExcelResult来实现导出Excel的功能,方便平时使用时调用。
导出Excel我们用到了Npoi这个库,使用我们自己对Npoi稍微封装了一下的方法MyExcel,具体使用可以看https://blog.youkuaiyun.com/sammy520/article/details/82492238
代码实现如下:
/// <summary>
/// 用户Excel导出的ActionResult
/// </summary>
/// <typeparam name="T"></typeparam>
public class ExcelResult<T> : ActionResult
where T:class{
private List<T> _data;
private string _fileName;
public ExcelResult(List<T> data,string fileName) {
_data = data;
_fileName = fileName;
}
public override void ExecuteResult(ControllerContext context) {
if(context == null) {
throw new ArgumentNullException("context");
}
//context.HttpContext.Response.ContentType = "";
if (_data != null) {
MyExcel.WriteExcel(_data, _fileName, context.HttpContext);
}
}
}
我们只要重写继承ActionResult,通构造函数传入参数,重写ExecuteResult这样就实现了此功能
我们在Controller中就可以调用此ActionResult了
//导出excel
public ActionResult Exp() {
var list = _developApplyListService.ExpList();
return new ExcelResult<rd_DevelopApplyDto>(list, "abc");
}