js代码生成form,解决mvc的url参数过长问题
在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参数过长问题的更多相关文章
- 分享一个好用的函数吧,将js中的对象转成url参数
JavaScript&jQuery获取url参数方法 这个函数呢是自己在写基于Vue+ElementUI管理后台时用到的,,下面列出来两种使用方式: 最普通的,封装一个js函数 /** * 对 ...
- 解决window.location.href参数太长
前言:一提到页面跳转,最常用的一般就是window.location.href,如果需要带参数,也许可以在后面用?拼上,但这样并不安全,而且有个更严重的问题,这样的拼接是有长度限制的,如果达到好几千个 ...
- 解决window.location.href参数太长 post提交数据
前言:一提到页面跳转,最常用的一般就是window.location.href,如果需要带参数,也许可以在后面用?拼上,但这样并不安全,而且有个更严重的问题,这样的拼接是有长度限制的,如果达到好几千个 ...
- 在ASP.NET非MVC环境中(WebForm中)构造MVC的URL参数
目前项目中有个需求,需要在WebForm中去构造MVC的URL信息,这里写了一个帮助类可以在ASP.NET非MVC环境中(WebForm中)构造MVC的URL信息,主要就是借助当前Http上下文去构造 ...
- 在ASP.NET非MVC环境中(WebForm中)构造MVC的URL参数,以及如何根据URL解析出匹配到MVC路由的Controller和Action
目前项目中有个需求,需要在WebForm中去构造MVC的URL信息,这里写了一个帮助类可以在ASP.NET非MVC环境中(WebForm中)构造MVC的URL信息,主要就是借助当前Http上下文去构造 ...
- js的form表单提交url传参数(包含+等特殊字符)的解决方法
方法一:(伪装form表单提交) linkredwin = function(A,B,C,D,E,F,G){ var formredwin = document.createElemen ...
- js获取或设置当前窗口url参数
直接上代码 // 获取当前窗口url中param参数的值 function get_param(param){ var query = location.search.substring(1).spl ...
- JS页面跳转加密解密URL参数
页面跳转加密参数 window.location.href="foot.html?"+btoa(encodeURIComponent("goodid="+goo ...
- JS request函数 用来获取url参数
function request(strParame) { var args = new Object( ); var query = location.search.substring(1); va ...
随机推荐
- 【Cocos2d-x 3.x】 场景切换生命周期、背景音乐播放和场景切换原理与源码分析
大部分游戏里有很多个场景,场景之间需要切换,有时候切换的时候会进行背景音乐的播放和停止,因此对这块内容进行了总结. 场景切换生命周期 场景切换用到的函数: bool Setting::init() { ...
- uploadfy api中文文档
Uploadify是一款基于JQuery的优秀的文件/图片上传的插件,有基于Flash和HTML5两种版本. Uploadify/uploadifive主要特点有:1. 多文件上传2. 个性化设置3. ...
- mysql 操作用户权限
使用可以对mysql数据库用户表有操作权限的用户名登陆mysqlinsert into user(Host,User,Password) values('%','name','password');如 ...
- 关于Cookie的 工具类
import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.net.URLEncoder; ...
- Next Permutation
Implement next permutation, which rearranges numbers into the lexicographically next greater permuta ...
- kuangbin_SegTree M (HDU 4553)
put my gezi这句话不得不说我看了好几秒才反应过来什么意思(你咋不上天呢 目测了一下也是区间合并 但是是成段更新的区间合并 但是!我终于!自己!写出来了! 嗯还算是比较顺利的 query的地方 ...
- Matlab 进阶学习记录
最近在看 Faster RCNN的Matlab code,发现很多matlab技巧,在此记录: 1. conf_proposal = proposal_config('image_means', ...
- OpenCV学习笔记——OpenCV安装
关于OpenCV安装 1.下载和安装OpenCV SDK 在官网:http://opencv.org/上找到OpenCV windows版下载 . 后得到一个 opencv-2.X.X.exe的文件, ...
- linux 维护常见场景小命令 (未完待续)
1.安装KDE桌面 [root@rhel06 ~]# yum -y groupinstall "X Windows System" "KDE Desktop" ...
- 第一章 数据库概述、MySQL的安装和配置
第一章 数据库概述.MySQL的安装和配置 1.为什么要使用数据库 最早是纸质文件来存储数据 缺点:不易保存,占用空间大 计算机出现以后,采用软件来进行保存(excel) 缺点:容易损坏 文件 ...