ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)

AJAX的好处就是不会堵塞页面,可以提高用户体验,可以减少数据传输尺寸,提高应用程序的性能.目前,AJAX技术可以说是已经成为WEB开发的标准技术.

AJAX技术是纯客户端技术,任何客户端框架(如:Microsoft AJAX Library,Prototype,JQuery等)可以与任何服务器技术配合.在ASP.NET MVC P5中也对AJAX技术进行了整合.本文将以ASP.NET MVC中的AJAX应用为主题介绍下AJAX技术与ASP.NET MVC的整合应用.

在此我希望在阅读本文的你应该对AJAX技术的数据传输模式比较清楚,详细可以查看我之前写的两篇关于AJAX的数据传输模式的文章:探索AJAX中的消息传输模式(一) 探索AJAX中的消息传输模式(二)

一、实现原理分析

在ASP.NET MVC中,每一个请求(Request)都将会被Route到控制器(Controller)下的一个具体的行为(Action)来处理.那么,如果说我们需要在ASP.NET MVC中使用AJAX,只需要在Action方法中完成业务逻辑,并把需要回传的数据写回到Response中,在客户端就可以通过JavaScript来处理这些回传数据.

对的,以上思路是完全可行的,ASP.NET MVC的每个Action就相当于Java Web MVC框架的Struts里的Servliet一样,是完全可以通过Request请求和Response来响应请求的.

我们可以先做个测试,建立一个ASP.NET MVC应用程序,Views里新建立Ajax目录,以及新建一Controller(AjaxController),并提供一个Action方法AjaxServer,该方法需要接受一个参数,然后将参数传转换为大写后放入Response流.

ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)
OK,现在启动项目并通过访问:http://localhost:2832/Ajax/AjaxServer?str=abcdefg查看运行结果,页面上输出了ABCDEFG,这正是我们想要的效果,证明上面的思路是正确的.那好,下面我就用一个简单的Ajax请求来实现在ASP.NET MVC中最简单的AJAX应用.

二、在ASP.NET MVC中最简单的AJAX应用

这个应用示例将使用最原始的XMLHttpRequest对象来完成。如下示例代码:

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->1ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)<scripttype="text/javascript">
2ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)varxmlHttp;
3ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)functioncreateXMLHttpRequest()
4ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......){
5ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)if(window.ActiveXObject)
6ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......){
7ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)xmlHttp=newActiveXObject("Microsoft.XMLHTTP");
8ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)}

9ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)elseif(window.XMLHttpRequest)
10ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......){
11ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)xmlHttp=newXMLHttpRequest();
12ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)}

13ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)}

14ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)
15ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)//处理方法
16ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)functionAjaxRequest()
17ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......){
18ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)createXMLHttpRequest();
19ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)varurl="Ajax/AjaxServer?str="+document.getElementById("txt").value;
20ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)xmlHttp.open("GET",url,true);
21ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)xmlHttp.onreadystatechange=onSuccessCallBack;
22ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)xmlHttp.send(null);
23ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)}

24ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)
25ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)//回调方法
26ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)functiononSuccessCallBack()
27ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......){
28ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)if(xmlHttp.readyState==4)//4代表
29ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......){
30ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)if(xmlHttp.status==200)
31ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......){
32ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)document.getElementById("result").innerHTML=xmlHttp.responseText;
33ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)}

34ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)}

35ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)}

36ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)</script>

这个示例很简单,就是通过之前做测试的Action方法,使用XMLHttpRequest直接发起请求,将页面文本框里输入的字符传递到ASP.NET MVC的Action,然后将回传的结果显示在页面上的一个div里。Html的代码如下:

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->1<inputtype="text"id="txt"/><br/>
2<inputtype="button"value="AjaxRequest"onclick="AjaxRequest();"/>
3<hr/>
4<divid="result"></div>


OK,我们使用XMLHttpRequest的AJAX应用可以实现,那么如果需要将上面的应用示例转化为如Microsoft AJAX Library,Prototype,JQuery等类似的框架上同样也是如鱼得水,复杂的数据同样可以将起序列化为JSON或是XML后进行传输.

三、在ASP.NET MVC中使用Microsoft AJAX Library

上面介绍了使用XMLHttpRequest对象来完成AJAX应用,下面我们来看看怎么在ASP.NET MVC中使用Microsoft AJAX Library.首先建立一新的ASP.NET MVC页面MsAjaxLibrary.aspx,并在控制器里加入相应的Action方法:

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->1ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)publicActionResultMsAjaxLibrary()
2ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......){
3ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)returnView();
4ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)}

OK,现在我们需要将Microsoft AJAX Library引入页面:

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->1ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)<headrunat="server">
2ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)<title></title>
3ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)<scripttype="text/javascript"src="http://www.cnblogs.com/Content/MicrosoftAjax.js"></script>
4ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)</head>

有了上面的准备,下面就可以编写客户端JavaScript来进行AJAX请求了,这里我们将使用Microsoft AJAX Library的Sys.Net.WebRequest类来完成AJAX调用.AJAX服务端将继续使用本文之前的Action方法(AjaxServer)做为服务器来进行请求调用。完整的JS代码如下:

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->1ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)<scripttype="text/javascript">
2ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)functionAjaxRequest()
3ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......){
4ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)//请求地址
5ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)varurl="AjaxServer?str="+$get("txt").value;
6ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)
7ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)varwRequest=newSys.Net.WebRequest();
8ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)wRequest.set_url(url);
9ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)wRequest.set_httpVerb("POST");
10ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)wRequest.add_completed(OnSuccessCallBack);
11ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)$get("result").innerText="";
12ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)wRequest.invoke();
13ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)}

14ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)
15ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)functionOnSuccessCallBack(executor,e)
16ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......){
17ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)//responseAvailable-请求是否成功完成
18ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)if(executor.get_responseAvailable())
19ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......){
20ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)if(document.all)
21ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)$get("result").innerText+=executor.get_responseData();
22ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)}

23ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)else
24ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......){
25ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)if(executor.get_timedOut())
26ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......){
27ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)alert("超时");
28ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)}

29ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)elseif(executor.get_aborted())
30ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......){
31ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)alert("请求被终止");
32ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)}

33ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)}

34ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)}

35ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)</script>

OK,现在我们在客户端通过一个按扭来执行请求,并将响应的结果放置在一个叫result的div容器里。

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->1ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)请输入英文字母:<inputid="txt"type="text"/>
2ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)<inputid="btnRequest"type="button"value="Request"onclick="AjaxRequest();"/>
3ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)<hr/>
4ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)<divid="result"></div>

程序运行结果如下:
ASP.NET MVC中使用AJAX(XMLHttpRequest、Microsoft AJAX Library......)

关于ASP.NET MVC与JQuery、ExtJS等其他的框架的集成使用这里就不在介绍了,有兴趣的朋友可以查看相关资料了解。本文作为ASP.NET MVC和AJAX技术整合使用的基础性文章,希望能对学习在ASP.NET MVC中使用AJAX的朋友起到入门的帮助,

本文示例代码下载:点击这里下载

相关文章:

在ASP.NET MVC中使用ASP.NET AJAX异步访问WebService