在一些页面处理中,如果需要多次进行后台提交处理的话,就会不停的刷新页面,很烦人,特别是机器配置不好或者网络状况不好的情况下,更加显得让人难受。
这种情况下我们可以利用XMLHTTP来实现不刷新的提交,这在做asp的时候就有不少这样的应用,在asp.net里使用也是一样的。
首先,新建一个页面,命名Send.aspx, 用来做需要提交的页面,另一个页面do.aspx, 用来做处理提交的页面。
在Send.aspx页面中,有一个input输入框,作为我们需要提交到后台的数据,
<
input
id
="txtUser"
type
="text"
runat
="server"
>
另外写一个js的提交方法,代码如下:
function
SendData() {
var
xh
=
new
ActiveXObject(
"
MSXML2.XMLHTTP
"
) xh.open(
"
POST
"
,
"
do.aspx?ID=1
"
,
false
); xh.send(document.all.txtUser.value); alert(xh.responseText);
//
打印XMLHTTP的返回数据
}
这个js方法非常简单,定义一个XMLHTTP对象,然后就调用open方法和send方法,就可以了
在处理的页面do.aspx,在对应的cs文件do.aspx.cs中,这样来接收发送过去的数据:
int
id
=
0
;
if
(Request.Params[
"
ID
"
]
!=
null
) {
//
接收从url中传递过来的参数
id
=
int
.Parse(Request.Params[
"
ID
"
]); }
//
接收从xh.send()方法中传递过来的数据
System.IO.Stream stream
=
Request.InputStream; System.IO.BinaryReader br
=
new
System.IO.BinaryReader(stream, System.Text.Encoding.Default);
int
len
=
int
.Parse(stream.Length.ToString());
byte
[] b
=
br.ReadBytes(len);
//
这里可以根据传递过来的参数和数据进行各种处理
//
...
//
返回给发送页面的数据,通过Response.Write()来传递
//
这里将发送过来的参数和数据返回
Response.Write(id
+
System.Text.Encoding.Default.GetString(b));
整个过程就这样OK了。
注意,在do.aspx文件的html代码页面中,如果存在任何的前台代码,都会作为send()请求的返回内容,一并返回到xh.responseText中。
XMLHTTP还有很多其他的属性和方法,大家有兴趣的话可以再研究一下,另外,可以结合MSXML.DOMDocument来将xml文件作为前后台传输数据的介质。