作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的長度限制,能夠傳遞大數據量的參數了:)