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

时间: 2025-01-02 17:31:35

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

Ajax的底层实现--使用Ajax实现无刷新登录实例--解决ajax中URl参数带中文的乱码问题

  1.jsp代码 第一部分(html代码):前端页面 <div id="login"> 用户名: <input type="text" id="userName"/> <!--用户名--> 密码: <input type="password" id="psw"/> <!--密码--> <input type="submit&quo

JS分页 + 获取MVC地址栏URL路径的最后参数

1 @{ 2 Layout = null; 3 } 4 5 <!DOCTYPE html> 6 7 <html> 8 <head> 9 <meta name="viewport" content="width=device-width" /> 10 <title>AjaxPage</title> 11 <script src="/Scripts/jquery-1.7.1.js&q

[js开源组件开发]query组件,获取url参数和form表单json格式

query组件,获取url参数和form表单json格式 距离上次的组件[js开源组件开发]ajax分页组件一转眼过去了近二十天,或许我一周一组件的承诺有了质疑声,但其实我一直在做,只是没人看到……,最近项目紧,几个小组,只有我一个前端,公司对前端的定位不清晰,导致前端人员过少的情况.所以还得促进公司前端人员增长,不然再这么玩下去,我要被玩死了,一个公司,不可能靠一个资深前端来支撑二三十个开发的需求,这是不现实的,特别是现在的页面不再是复制粘贴的前况下.我默默耕芸,所以这次我整理了这一个月里所有

纯JS设置首页,加入收藏,获取URL参数,解决中文乱码

雪影工作室版权所有,转载请注明[http://blog.csdn.net/lina791211] 1.前言 纯Javascript 设置首页,加入收藏. 2.设置首页 // 设置为主页 function SetHome(obj, vrl) { try { obj.style.behavior = 'url(#default#homepage)'; obj.setHomePage(vrl); } catch (e) { if (window.netscape) { try { netscape.s

MVC中URL传多个参数

1.mvc中url传递多个参数不能直接使用&,会报错(从客户端(&)中检测到有潜在危险的 Request.Path 值) 方法①:使用?---/Home/Index/?id=xxx&name=xxx(js:"/MsgTypeTem/Edit/?id=" + temId + "&flag=" + Math.random()) 方法②:修改路由规则--- routes.IgnoreRoute("{resource}.axd/{*

iis设置Gzip后,无后缀的url无法压缩解决 MVC iis GZIP

<IIsCompressionScheme    Location ="/LM/W3SVC/Filters/Compression/gzip"        HcCompressionDll="%windir%\system32\inetsrv\gzip.dll"        HcCreateFlags="1"        HcDoDynamicCompression="TRUE"        HcDoOnDema

关于tomcat对编码不正确的url参数报错的解决

按照规范,url参数必须使用限定字符,其它字符需要进行编码,用像js的encodeurlcomponent函数. 在IE和360浏览器的兼容模式,不会自动对url的参数进行编码,会导致tomcat报错. 对浏览器参数进行编码就解决了问题. Stack Overflow上有问到这个,但是解答不正确,点支持的很少. 百度搜索结果也有提到,说要在nginx对请求进行编码. 原文地址:https://www.cnblogs.com/silvestris/p/12038063.html

js获取url参数

   //获取url参数    function getRequest() {         var url = location.search; //获取url中"?"符后的字串 var theRequest = new Object();         if (url.indexOf("?") != -1) { var str = url.substr(1); strs = str.split("&"); for(var i = 

JS获取url参数及url编码、解码

完整的URL由这几个部分构成:scheme://host:port/path?query#fragment ,各部分的取法如下: window.location.href:获取完整url的方法:,即scheme://host:port/path?query#fragment window.location.protocol:获取rul协议scheme window.location.host:获取host window.location.port:获取端口号 window.location.pa