1、在webconfig中加入:
<!--
让asp.net把任何匹配到特定的路径(ajax/*.ashx)请求发送到Ajax.PageHandlerFactory产生的HttpHandle,
而不再是默认的Handler factory。
你不需要创建ajax子目录,这是一个只用来临时使用的虚拟的目录,
因此别的HttpHandler可以用他们自己的目录来使用.ashx扩展名的文件。
-->
<httpHandlers>
<add verb="*" path="*.ashx" type="AjaxPro.AjaxHandlerFactory,AjaxPro"/>
</httpHandlers>
2.在要使用ajax的页面的load事件中加入:
Utility.RegisterTypeForAjax(typeof(ClassName));
需添加using AjaxPro;
3.在被javascript调用的函数前加:[AjaxMethod]标记
4.用javascript调用:Namespace.ClassName.Function();
异步调用:
Sample.ServerSideAdd(100,99, ServerSideAdd_CallBack);
function ServerSideAdd_CallBack(response){
if (response.error != null){
alert(response.error);
return;
}
alert(response.value);
}
这个callback函数接受一个带有四个关键属性的response对象:
value:服务器端函数执行的返回值(可能是一个字符串、自定义对象或者dataset)
error:如果发生错误,则返回错误信息.
request:原始的xmlHttpRequest请求
context:一个上下文对象
说明:
Ajax可以支持除了我们上面ServerSideAdd函数返回的Int值以外很多类型。他可以直接支持integers, strings, double, booleans, DateTime, DataSets 和 DataTables,也支持简单的自定义类型和数组。其他的类型通过其ToString方式来返回字符串。
在方法中使用Session需要指明:
Ajax.AjaxMethod(HttpSessionStateRequirement.Read)] 还可以是Write and ReadWrite
还可以设置属性供客户端调用
[AjaxPro.AjaxProperty()]
public string UserName
{
set
{
Session["UserName"] = value;
}
get
{
return Session["UserName"].ToString();
}
}
返回DataTable到客户端:
tab = RYCSearch.Market.FrmTECDoc.GetInfo(docid).value;
tab是一个DataTable,
则:tab.Rows.length 为记录数
读取记录中的数据:
dr = tab.Rows[0];
document.all.Form1.txtLockBar.value = dr["LOCKBAR"];