首页 > 代码库 > js代码生成form,解决mvc的url参数过长问题
js代码生成form,解决mvc的url参数过长问题
在MVC项目中,通常下载的文件的简单方式是直接采用 location.href+查询参数方式。
1 var searchParams = {2 studentName: $("#StudentName").val(),3 birthDate: $("#BirthDate").val()4 };5 var baseurl = "@Url.Action("ExportData", "Student")";6 location.href = http://www.mamicode.com/baseurl + "?" + $.param(searchParams);
但是对于查询参数过长时url就会出错,因为IE浏览器对URL的最大限制为2083个字符,如果超过这个数字,提交按钮没有任何反应。对于Firefox浏览器URL的长度限制为65,536个字符,但当我测试时,最大只能处理8182个字符,这是因为url的长度除了浏览器限制外,还会受Web服务器的限制。注:可能有些朋友会想当然的认为,如果最大长度限制为2038字符,是不是参数差不多可以传递1000个左右的汉字。这样认为其实是不对的,对于中文的传 递,最终会为urlencode后的编码形式进行传递,如果浏览器的编码为UTF8的话,一个汉字最终编码后的字符长度为9个字符。(此段话引用URL最大长度问题,非常感谢)
所有楼主改用form提交,由于系统有多个页面存在导出文件功能,并且一个页面也存在导出存在多个Excel的情况,故写了个插件,有啥意见和建议欢迎批评改正。
原始的方式:提前在界面先定义好form,当用户点击时提及。
//原生写法<form method="POST" action="@Url.Action("ExportData", "Student")" id="exportForm"> <input type="hidden" id="studentName" name="studentName" /> <input type="hidden" id="birthDate" name="birthDate" /></form> //MVC封装好的方法@Html.BeginForm("ExportData", "Student", FormMethod.Post, new { id = "exportForm" }) { <input type="hidden" id="stationCodes" name="stationCodes" /> <input type="hidden" id="studentName" name="studentName" /> <input type="hidden" id="birthDate" name="birthDate" /> }
封装好的插件:
1 /* 导出excel 2 11.13.2014 - LQZ - 全选站点url过长ie超过2083个字符将报错,将所有url整合成form提交 3 */ 4 ;(function() { 5 var instance; 6 window.GridExportOperate = function () { 7 if (instance) { 8 return instance; 9 }10 instance = this;11 this.gridexport = function(formPara, formId, formUrl) {12 if (!$("#" + formId).length) {13 var form = document.createElement("form");14 form.type = "post";15 //form.style.display = "none";16 document.body.appendChild(form);17 form.action = formUrl;18 for (item in formPara)19 createInput(form, "hidden", item, formPara[item]);20 form.submit();21 } else {22 for (item in formPara)23 changeInput(item, formPara[item]);24 $("#" + formId).submit();25 }26 };27 28 function createInput(form, type, name, value) {29 var tmpInput = document.createElement("input");30 tmpInput.type = type;31 tmpInput.name = name;32 tmpInput.value =http://www.mamicode.com/ value;33 form.appendChild(tmpInput);34 }35 function changeInput(name, value) {36 $(‘#‘ + name).val(value);37 }38 };39 })(jQuery);
调用方法创建类的实例后调用。
var gridxportOperate = new GridExportOperate();gridxportOperate.gridexport(formPara, formId, baseurl);
js代码生成form,解决mvc的url参数过长问题
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。