方法一:使用一般处理程序
asp.net可以使用一般处理程序(ashx)来配合ajax。
一般处理程序可以处理任何请求。
缺点:需要手动做请求参数的获取。对于返回值需要手动格式化字符串。
方法二:微软AJAX解决方案
1. ASP.NET中内置的简化AJAX开发的控件UpdatePanel。
(1)添加ScriptManager控件。一般放到页面的最上面。
(2)添加UpdatePanel控件。将需要使用AJAX效果的页面放入UpdatePanel中。对该控件的事件处理,就可以实现AJAX效果。
*原理:
1.UpdatePanel实现的Ajax会把页面的ViewState,以及其他表单数据都发生给服务器。相当于提交了一次正常的表单。
2.服务器端生成UpdatePanel中控件的新HTML。返回给个客户端,页面自动把接受到的HTML重新更新到UpdatePanel中去。
*实质:这种方式的AJAX与正常的一次表单提交没有多大区别。每次提交,服务器端的Page对象生命周期的事件都会触发。
*优点:应用非常简单。
*缺点:冗余。通讯量大。
*应用:UpdatePanel用来实现一些对性能要求不高的需求非常方便。
2. Timer实现定时AJAX效果。
(1)添加Timer定时器控件。放入UpdatePanel中。
(2)设定Timer定时器的Interval,触发时间间隔。
(3)编写Timer1_Tick()事件处理代码。
3. UpdateProgress显示“正在加载数据”
方法三:AJAXToolkit轻量级控件
微软的开源控件。属于第三方。
需要添加到项目中。
开发简单,效率不错。
方法四:WCF简化AJAX
优点轻量级
【添加新项】-->【启用了AJAX的WCF服务】
例如:新建一个PersonService.svc。
说明:服务代码文件的后缀名为svc。
1.WCF服务IDE会自动生成方法DoWork()。
注意:客户端需要访问的方法上必须要有[OperationContract]。
例:添加客户端需要访问的方法GetPerson(int id)该方法通过参数id返回,对应的Person对象。
namespace WCFAJAX { //..... public class PersonService { [OperationContract] public Person GetPerson(int id) { return new Person(){Name="tom",Age=24}; } [OperationContract] public void DoWork() { } } public class Person { public string name{get;set;} public int Age{get;set;} } }
2.页面上需要添加ScriptManager控件。对ScriptManager控件Services属性的对话框中,添加引用服务。
例如:
即【行为】-->Path,添加服务路径。如~/PersonService.svc。
3.在页面的<script>中编写处理方法
例如:按下按钮,得到服务器上id为1的Person。
添加按钮事件
<input id="Button1" type="button" value="button" onclick="return Button1_onclick()" />
在<script>中处理事件。
function Button1_onclick(){ PersonService.GetPerson(1, function(data){ //请求成功处理函数 alert(data.Name); }, function(){ //请求失败处理函数 alert("请求失败"); } ); }
有时候会出现一些IDE问题,在页面写<script>时,添加的服务对象不能被IDE提示。可以先关闭页面,再打开页面。
优点:相当于添加用JavaScript代码调用C#方法。形式上比较简单。
附加:
json
asp.net服务器端生成json,可以使用JavaScriptSerializer类,将一个C#对象序列化为json对象。
JavaScriptSerializer类在 .Net 3.x 被支持。在2.0之下,使用第三方类来实现。
方法如下:
JavaScriptSerializer jss=new JavaScriptSerializer(); //将C#对象序列化 JavaScript对象。 string json1=jss.Serialize(new Person(){Name="tom",Age="30"}); //将C#数组序列化为JavaScript的Array。 string json2=jss.Serialize(new string["a","b","c"]); //将C#对象数组序列化为JavaScript对象数组。 Person[] ps=new Person[]{new Person(){Name="tom",Age=21},new Person(){Name="cat",Age=22}}; string json2=jss.Serialize(ps);
jquery解析text为json的方法:
$.post("JsonTest.ashx",function(data,status){ var person = $.parseJSON(data); //访问 person.Name person.Age。 })