在MVC项目中,通常下载的文件的简单方式是直接采用 location.href+查询参数方式。

 var searchParams = {
studentName: $("#StudentName").val(),
birthDate: $("#BirthDate").val()
};
var baseurl = "@Url.Action("ExportData", "Student")";
location.href = 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" />
}

封装好的插件: var

 /* 导出excel
11.13.2014 - LQZ - 全选站点url过长ie超过2083个字符将报错,将所有url整合成form提交
*/
;(function() {
var instance;
window.GridExportOperate = function () {
if (instance) {
return instance;
}
instance = this;
this.gridexport = function(formPara, formId, formUrl) {
if (!$("#" + formId).length) {
var form = document.createElement("form");
form.type = "post";
//form.style.display = "none";
document.body.appendChild(form);
form.action = formUrl;
for (item in formPara)
createInput(form, "hidden", item, formPara[item]);
form.submit();
} else {
for (item in formPara)
changeInput(item, formPara[item]);
$("#" + formId).submit();
}
}; function createInput(form, type, name, value) {
var tmpInput = document.createElement("input");
tmpInput.type = type;
tmpInput.name = name;
tmpInput.value = value;
form.appendChild(tmpInput);
}
function changeInput(name, value) {
$('#' + name).val(value);
}
};
})(jQuery);

调用方法创建类的实例后调用。

  var gridxportOperate = new GridExportOperate();

gridxportOperate.gridexport(formPara, formId, baseurl);

最新文章

  1. CentOS 7 x64下Apache+MySQL(Mariadb)+PHP56的安装
  2. android intent 传递list或者对象
  3. 0x00到0xFF二进制数值中1的的个数
  4. [CareerCup] 18.3 Randomly Generate Integers 随机生成数字
  5. python操作Excel读写--使用xlrd和xlwt
  6. storm流式大数据处理流行吗
  7. oracle 基本操作
  8. Storm因机器断电等,启动supervisor异常
  9. [转] 使用git自动部署简单网站
  10. iOS7 StatusBar 使用小结
  11. GDOI模拟赛Round 1
  12. ORM框架Hibernate (四) 一对一单向、双向关联映射
  13. IOS开发者证书申请及应用上线发布详解(2014版)
  14. 机器学习:线性判别式分析(LDA)
  15. tomcat端口修改以及jvm启动参数设置
  16. poi操作Excel的封装类
  17. Nginx中文url出现404问题
  18. java 线程池简单例子
  19. boost asio 学习(八) 网络基础 二进制写发送和接收
  20. margin不生效问题

热门文章

  1. 错误集:js解析jQuery.post返回的xml之Could not find action or result
  2. ubuntu 一些命令
  3. mysql 的max_connections和max_user_connections 的区别
  4. 浅谈声明与定义的区别 分类: C/C++ 2015-06-01 15:08 157人阅读 评论(4) 收藏
  5. java如何在eclipse编译时自动生成代码
  6. [原创]cocos2d-x研习录-第三阶 特性之加速度传感器
  7. 数迹学——Asp.Net MVC4入门指南(5):从控制器访问数据模型
  8. XMLHttpRequest
  9. Spring集成jedis支持Redis3.0集群
  10. mysql relay log参数汇总