`

ASP.NET中使用Ajax

 
阅读更多

方法一:使用一般处理程序

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。
})

 

 

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics