在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. Java 第十周学习总结

    20145113<Java程序设计>第十周学习总结 基础知识 1.网络通讯的方式主要有两种 TCP(传输控制协议)方式:需要建立专用的虚拟连接以及确认传输是否正确 UDP(用户数据报协议) ...

  2. event.stopPropagation()与event.preventDefault()

    <div id='div0'> <div id='div1'> <a href="#" id='div2'>2222</a> < ...

  3. Android中ExpandableListView的使用

    ExpandableListView是Android中可以实现下拉list的一个控件,具体的实现方法如下: 首先:在layout的xml文件中定义一个ExpandableListView < L ...

  4. Ret2Libc 练习(1) -- ZwSetInformationProcess

    花了两个小半晚上的时间将0day安全这本书的绕过DEP的第一个实验做了,这里做些笔记. Ret2libc 我现在自己的理解就是在开启DEP保护的情况下,在程序的其他的可执行位置找到可以满足我利用要求的 ...

  5. NewQuant的设计(二)——MatrixComputation的领域分析

    NewQuant的设计——MatrixComputation的领域分析 MatrixComputation是NewQuant中最重要也是最大的一个模块,这个模块的领域分析要从回答几个问题开始. 一.矩 ...

  6. 自建yum源及分组安装

    最近在研究一套自动化运维方向的框架,在想到远程安装软件包的时候,觉得有yum支持会更方便一些.主要思路是把程序员写的代码或程序打包成rpm,然后提交到自建yum源,并实现按组安装,本地yum源实现步骤 ...

  7. 2016_09_21 Russia is seriously running out of cash_CNN

    After almost two years in recession,the country's rainy day fund has shrunk to just $32.2 billlion t ...

  8. (document).height()、$(document).scrollTop()

    (document).height().$(document).scrollTop(),有需要的朋友可以参考下. jQuery(window).height()代表了当前可见区域的大小,而jQuery ...

  9. Android应用开发-Activity(重制版)

    Android四大组件:Activity,Service,Broadcast Receiver,Content Provider Activity是Context的子类,同时实现了Window.Cal ...

  10. linux 维护常见场景小命令 (未完待续)

    1.安装KDE桌面 [root@rhel06 ~]# yum -y groupinstall "X Windows System" "KDE Desktop" ...