<经验杂谈>前端form提交导出数据

之前在做列表的是总会遇到一些导出的功能,而在做导出的时候总是习惯于用get的方法将参数放在url上,这样一来就会有很多的弊端,一是url的参数长度有限,遇到有的参数很长的时候就会报错,二是也不太安全。

按照之前写法:

var url = ‘@Url.Action("")‘;
window.open(url, "_blank");

现在改成前端form提交的方式:

function doExport() {
            getCards();
            var element = ‘<form action="‘+url+" target="_self" method="post">‘
    + ‘<input type="text" name="StartDate" value="‘ + vm.searchReportParam.StartDate + ‘" />‘
    + ‘<input type="text" name="EndDate" value="‘ + vm.searchReportParam.EndDate + ‘" />‘
    + ‘<input type="text" name="CardIdsStr" value="‘ + vm.CardIdsStr + ‘" />‘
    + ‘</form>‘;
            $(element).appendTo(‘body‘).submit().remove();
        };

后端数据处理:

public static void ToExcel<T>(List<T> datas, int SheetRows, string exportName, HttpResponseBase response)
        {
            AppLibrary.WriteExcel.XlsDocument doc = new AppLibrary.WriteExcel.XlsDocument();

            doc.FileName = exportName + ".xls";
            string SheetName = string.Empty;
            //记录条数
            int mCount = datas.Count;

            //每个SHEET的数量
            int inv = SheetRows;
            //计算当前多少个SHEET
            int k = Convert.ToInt32(Math.Round(Convert.ToDouble(mCount / inv))) + 1;

            Type type = typeof(T);
            PropertyInfo[] properties = type.GetProperties();

            for (int i = 0; i < k; i++)
            {
                SheetName = "数据表" + i.ToString();
                AppLibrary.WriteExcel.Worksheet sheet = doc.Workbook.Worksheets.Add(SheetName);
                AppLibrary.WriteExcel.Cells cells = sheet.Cells;

                //创建列样式创建列时引用
                XF cellXF = doc.NewXF();
                cellXF.VerticalAlignment = VerticalAlignments.Centered;
                cellXF.HorizontalAlignment = HorizontalAlignments.Centered;
                cellXF.Font.FontFamily = FontFamilies.Roman;//设置字体 默认为宋体 

                for (int ColIndex = 0; ColIndex < properties.Length; ColIndex++)
                {

                    PropertyInfo property = properties[ColIndex];
                    ExportAttribute attribute = property.GetCustomAttribute<ExportAttribute>();
                    if (attribute != null)
                    {
                        cells.Add(1, ColIndex + 1, attribute.Name, cellXF);
                    }

                }
                int f = 1;
                for (int m = i * inv; m < mCount && m < (i + 1) * inv; m++)
                {
                    f++;
                    for (int CellIndex = 0; CellIndex < properties.Length; CellIndex++)
                    {
                        ExportAttribute attribute = properties[CellIndex].GetCustomAttribute<ExportAttribute>();
                        if (attribute != null)
                        {
                            object value = properties[CellIndex].GetValue(datas[m]);
                            if (properties[CellIndex].PropertyType == typeof(DateTime))
                            {
                                value = ((DateTime)value).ToString("yyyy/MM/dd");
                            }
                            cells.Add(f, CellIndex + 1, value, cellXF);

                        }
                    }
                }
            }

            doc.Send();
            response.Flush();
            response.End();
        }

使用插件NPOI来生成EXCEL:

private static HttpResponseMessage GetExcelResponse(List<T> models)
        {

            HSSFWorkbook book = new HSSFWorkbook();
            ISheet sheet = book.CreateSheet("Sheet1");

            int rowIndex = 0;
            IRow headRow = sheet.CreateRow(rowIndex++);
            var headColIndex = 0;
            headRow.CreateCell(headColIndex++).SetCellValue("rows1");
            headRow.CreateCell(headColIndex++).SetCellValue("rows2");
            headRow.CreateCell(headColIndex++).SetCellValue("rows3");
            headRow.CreateCell(headColIndex++).SetCellValue("rows4");
            headRow.CreateCell(headColIndex++).SetCellValue("rows5");
            foreach (var model in models)
            {
                IRow row = sheet.CreateRow(rowIndex++);
                var colIndex = 0;
                row.CreateCell(colIndex++).SetCellValue(model.CardName);
                row.CreateCell(colIndex++).SetCellValue(model.Code);
                row.CreateCell(colIndex++).SetCellValue((double)model.ItemPrice);
                row.CreateCell(colIndex++).SetCellValue((double)model.CostPriceTotal);
                row.CreateCell(colIndex++).SetCellValue(model.OrderCode);
            }
            var ms = new MemoryStream();
            book.Write(ms);
            ms.Position = 0L;

            HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK);
            ms.Position = 0L;
            response.Content = new StreamContent(ms);
            response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.ms-excel");
            response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
            {
                FileName = $"导出{DateTime.Now.ToString("yyyyMMddHHmmss")}.xls"
            };
            return response;
        }
时间: 2024-11-06 10:18:07

<经验杂谈>前端form提交导出数据的相关文章

asp.net MVC中控制器获取表单form提交的数据之实体类数据

第一次写记录文章,难免有不足之处:欢迎指出. 1.新建一个mvc项目如: 2.新建一个Test.cs 注意get,set方法不能简写 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 using System; using System.Collections.Generic; using System.Linq; usi

新方法删除对象的key(适用于form提交类数据)

我们只需要 efg参数,abcd是不需要的 1.传统方法 const data = {a:1,b:2,c:3,d:4,e:5,f:6,g:7} delete data.a Reflect.deleteProperty(data, "b"); delete data.c Reflect.deleteProperty(data, "d"); 2.解构 const data = {a:1,b:2,c:3,d:4,e:5,f:6,g:7} const {a,b,c,d,..

导出excel时,以form方式提交json数据

今天在写项目时写到一个excel的导出,开始想用ajax请求后台后导出,但发现ajax会有返回值,而且ajax无法直接输出文件,而后台的excel导出方法已经封装好,不方便修改. 就改用了提交的方式form,但form提交,表格分页用的是jquerytable,我需要将一些jquerytable的一些参数传到后台,但这些数据已经是json数据,如果我直接放在input中提交到后台在解析参数会很麻烦,所以就想将json数据转为form方式提交. js //导出 function exportExc

servlet自动获取前端页面提交数据

servlet自动获取前端页面jsp提交数据 以下是本人在学习过程中,因前端页面提交参数过多,后台servlet封装实体类过于麻烦而写的一个工具类,应用于jsp/servlet数据提交后,基于MVC+MyBatis进行数据持久化的过程.这里只介绍页面到servlet(controller)提交数据封装对象的过程,MVC+MyBatis访问数据库不在这里介绍. 1.前端页面及代码 1)前端表单页面构建(用于测试简单构建的页面有点丑陋哦~) 2)前端jsp页面代码   这里使用了Ajax异步 get

2016 系统设计第一期 (档案一)jQuery ajax serialize()方法form提交数据

jQuery ajax serialize()方法form提交数据,有个很奇怪的问题,好像不能取到隐藏控件的值. //点击提交按钮保存数据 $('#btn_submitUser').click(function () { var UserId = $('#UserId').val(); if (UserId == "") { $.ajax({ type: "POST", url: '/Users/Create/', data: $("#SaveUserFo

asp.net MVC中form提交和控制器接受form提交过来的数据

MVC中form提交和在控制器中怎样接受 1.cshtml页面form提交2.控制器处理表单提交数据4种方式方法1:使用传统的Request请求取值[HttpPost]public ActionResult AddNews(){    string a=Request["text1"];    string b=Request["text2"];}方法2:Action参数名与表单元素name值一一对应[HttpPost]public ActionResult Add

form提交数据中文乱码问题总结

一:form在前台以post方式提交数据: 浏览器将数据(假设为“中国”)发送给服务器的时候,将数据变成0101的二进制数据(假设为98 99)时必然要查码表,浏览器以哪个码表打开网页,浏览器就以哪个码表提交数据.数据到达服务器后,数据(98 99)要封装到request中,在servlet中调用Request的getParameter方法返回的是字符串(“中国”),方法内部拿到数字后要转成字符,一定要查码表,由于request的设计者是外国人,所以默认查的是他们常用的ISO8859-1,这就是

mongodb - 前端form表单传递数据,在保存和取出的数据格式处理函数 - 非递归

//处理时间部分,将ISODate("2014-10-09T18: 37: 50.0Z") 转换成 2014-10-09 18:37:50这种格式 //最多处理6层树形结构数据,当多维数组中的key,包含数组$product_date_col中的任意一个字符,那么就会被处理. public static function processMongoGetDate($product){ foreach($product as $k1=>$v1){ if(!is_array($v1)&

ligerui_实际项目_003:form中添加数据,表格(grid)里面显示,最后将表格(grid)里的数据提交到servlet

实现效果: "Form"中填写数据,向本页"Grid"中添加数据,转换成Json数据提交,计算总和,Grid文本框可编辑,排序 图片效果: 总结: //display属性: editor:grid表格可以编辑其类容: //select类型:select+render实现选择填充效果 editor:{ type:"select", data:[{id:"1",text:"品牌一"},{id:"2&q