在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);

js代码生成form,解决mvc的url参数过长问题的更多相关文章

  1. 分享一个好用的函数吧,将js中的对象转成url参数

    JavaScript&jQuery获取url参数方法 这个函数呢是自己在写基于Vue+ElementUI管理后台时用到的,,下面列出来两种使用方式: 最普通的,封装一个js函数 /** * 对 ...

  2. 解决window.location.href参数太长

    前言:一提到页面跳转,最常用的一般就是window.location.href,如果需要带参数,也许可以在后面用?拼上,但这样并不安全,而且有个更严重的问题,这样的拼接是有长度限制的,如果达到好几千个 ...

  3. 解决window.location.href参数太长 post提交数据

    前言:一提到页面跳转,最常用的一般就是window.location.href,如果需要带参数,也许可以在后面用?拼上,但这样并不安全,而且有个更严重的问题,这样的拼接是有长度限制的,如果达到好几千个 ...

  4. 在ASP.NET非MVC环境中(WebForm中)构造MVC的URL参数

    目前项目中有个需求,需要在WebForm中去构造MVC的URL信息,这里写了一个帮助类可以在ASP.NET非MVC环境中(WebForm中)构造MVC的URL信息,主要就是借助当前Http上下文去构造 ...

  5. 在ASP.NET非MVC环境中(WebForm中)构造MVC的URL参数,以及如何根据URL解析出匹配到MVC路由的Controller和Action

    目前项目中有个需求,需要在WebForm中去构造MVC的URL信息,这里写了一个帮助类可以在ASP.NET非MVC环境中(WebForm中)构造MVC的URL信息,主要就是借助当前Http上下文去构造 ...

  6. js的form表单提交url传参数(包含+等特殊字符)的解决方法

    方法一:(伪装form表单提交) linkredwin = function(A,B,C,D,E,F,G){        var formredwin = document.createElemen ...

  7. js获取或设置当前窗口url参数

    直接上代码 // 获取当前窗口url中param参数的值 function get_param(param){ var query = location.search.substring(1).spl ...

  8. JS页面跳转加密解密URL参数

    页面跳转加密参数 window.location.href="foot.html?"+btoa(encodeURIComponent("goodid="+goo ...

  9. JS request函数 用来获取url参数

    function request(strParame) { var args = new Object( ); var query = location.search.substring(1); va ...

随机推荐

  1. system占用80端口的问题

    80端口被占用的问题 首先可以看看是不是iis占用了.如果是的话.修改为其他端口即可. 如果不是.. 在cmd中输入命令netstat -ano 查看是不是system占用了80端口? 如果是syst ...

  2. MySql和Oracle的日期转换到底有哪些不同?我们来比较一下

    1.MySql和Oracle的日期转换 mysql中有2种日期格式DATE和TIME,oracle只有一种日期格式DATE. oracle> select to_char(sysdate,'yy ...

  3. 关于Kendo的Grid 单元格样式

    <!DOCTYPE html><html style="height: 100%;"><head><meta http-equiv=&qu ...

  4. 数论 UVALive 2756

    这道题目考察的n个不同的数环形排列,每次相邻两个数交换位置,这样由正序转变成逆序所需操作的最小次数t. 公式:环形排列:t= n/2*(n/2 - 1)/2 + (n+1)/2* ((n+1)/2 - ...

  5. 安装Adobe系列时遇到的问题解决

    安装错误,错误摘要如下: Exit Code: 6 Please see specific errors below for troubleshooting. For example, ERROR: ...

  6. JavaEE视频学习

    1.实现东西应先实现静态,即使用固定的数据,比如链接数据库应先实现指定数据库如mysql的链接,成功后再向动态链接修改.方法也要这样写,一步步推进,不能一下子写出动态方法,这样很容易出错.

  7. 如何在JAVA中实现一个固定最大size的hashMap

    如何在JAVA中实现一个固定最大size的hashMap 利用LinkedHashMap的removeEldestEntry方法,重载此方法使得这个map可以增长到最大size,之后每插入一条新的记录 ...

  8. [原创]cocos2d-x研习录-第三阶 特性之加速度传感器

    智能手机的游戏与应用中,也经常会用到加速传感器事件来丰富用户的体验,比如飞翔的企鹅(英文AirPenguin)游戏就是通过加速度传感器来控制角色的移动和跳跃方向.下面学习Cocos2D-x中如何使用加 ...

  9. 庞巴迪TCMS学习笔记之一(IEC 61131-3函数)

    在学习列车TCMS系统的软件逻辑图时会遇到IEC 61131-3的语言.其中通用的图形化函数总结如下.

  10. struts2中web.xml的配置

    在web.xml</web-app>前添加的<filter></filter>和<filter-mapping></filter-mapping& ...