作Web开发时常常涉及到页面之间的转跳,页面之间的转跳就会涉及到页面之间参数的传递,经过URL传递参数是经常使用的方法之一,可是微软 说:"Maximum URL length is 2,083 characters in Internet Explorer",也就是说URL是有长度限制的。
ASP.NET应用程序前台与后台的数据交换都是经过FORM表单来完成的,FORM表单提供了两种数据传输方式:GET和POST,这个两种数 据传输方式在实际传输中有很大的不一样,但ASP.NET框架中已经屏蔽了两者的一些差别。GET是用来从服务器上得到数据,而POST是用来向服务器提交 数据的。两者
数据传输过程当中分别对应了HTTP协议中的GET和POST方法。
GET方式是把参数数据队列加到提交表单的ACTION属性所指的URL后面,而且使用"?"隔开,值和表单内各个字段一一对应,在URL中能够看到,它是FROM默认的提交方式,受URL长度的限制,它所能传递的数据量小。
POST方式是把表单中的数据放在FORM载体中,
按照变量和值相对应的方式,传递到ACTION所指向URL,POST能够传递大数据量的信息到服务器,一般文件上传就是使用POST方式上传。
为解决GET方式传递大数据量参数的问题,要使用POST方式进行数据提交,下面是一个用来代替window.open的方法
1.JavaScript
/*
* PostNewWin
* Author:ppchen
*/
var
PostNewWin
=
function
(url){
var
urlArr
=
url.split(
"
?
"
);
var
postUrl
=
urlArr[
0
];
var
postData
=
urlArr[
1
];
var
iframe
=
document.getElementById(
"
postData_iframe
"
);
if
(
!
iframe){
iframe
=
document.createElement(
"
iframe
"
);
iframe.id
=
"
postData_iframe
"
;
iframe.scr
=
"
about:blank
"
;
iframe.frameborder
=
"
0
"
;
iframe.style.width
=
"
0px
"
;
iframe.style.height
=
"
0px
"
;
var
form
=
document.createElement(
"
form
"
);
form.id
=
"
postData_form
"
;
form.method
=
"
post
"
;
form.target
=
"
_blank
"
;
document.body.appendChild(iframe);
iframe.contentWindow.document.write(
"
<body>
"
+
form.outerHTML
+
"
</body>
"
);
}
iframe.contentWindow.document.getElementById(
"
postData_form
"
).innerHTML
=
"
<input name='postData' id='postData' type='text' value='
"
+
postData
+
"
'/>
"
;
iframe.contentWindow.document.getElementById(
"
postData_form
"
).action
=
postUrl;
iframe.contentWindow.document.getElementById(
"
postData_form
"
).submit();
};
2.CSharp
///
<summary>
///
从Form中取得参数
///
Author:ppchen
///
</summary>
///
<returns>
参数集合
</returns>
private
NameValueCollection ParseFormData()
{
NameValueCollection sQueryString
=
new
NameValueCollection();
if
(
this
.Request.Form.Count
>
0
&&
this
.Request.Form[
"
postData
"
]
!=
null
)
{
string
sPostData
=
this
.Request.Form[
"
postData
"
].ToString();
sPostData
=
sPostData.Trim(
new
char
[] {
'
&
'
,
'
'
});
if
(
!
string
.IsNullOrEmpty(sPostData))
{
string
[] sParameterList
=
sPostData.Split(
'
&
'
);
for
(
int
i
=
0
; i
<
sParameterList.Length; i
++
)
{
string
[] sParameter
=
sParameterList[i].Split(
'
=
'
);
for
(
int
j
=
0
; j
<
sParameter.Length; j
=
j
+
2
)
{
sQueryString.Add(sParameter[j], HttpUtility.UrlDecode(sParameter[j
+
1
]));
}
}
}
}
return
sQueryString; }
经过以上的JS代码在客户端打开页面,经过以上的CS代码在服务端取得参数,这样使用了POST方式解决了GET方式中URL的长度限制,能够传递大数据量的参数了:)