要实现此功能要使用到AjaxPro.2.dll
第一步,下载AjaxPro.2.dll文件,并在项目中注册.注册方法:在解决方案资源管理器中找到方案名称,在方案名称处右键->添加应用,再选AjaxPro.2.dll文件所在位置.
第二步,在web.config文件中的<httpHandlers></httpHandlers>中加入<add verb="*" path="ajaxpro/*.ashx" type="AjaxPro.AjaxHandlerFactory, AjaxPro.2"/>
第三步,在cs文件中的Page_Load中加入:AjaxPro.Utility.RegisterTypeForAjax(typeof(_Default)); 其中的_Default就是该cs的类名,在js中要用到,另外记得写上using AjaxPro;
第四步,在cs中建立要在js中调用的函数,在定义函数前要加入[AjaxPro.AjaxMethod],例如
public static DataSet GetSqlData()
{
DataSet ds = new DataSet();
SqlCommand commQuery = new SqlCommand();
commQuery.CommandText = "select ID,Name from GoodCategory";
ds = MyClass.SqlClass.ds(commQuery);
return ds;
}
第五步,在前台建立函数.
function getDataSet()
{
var ds=_Default.GetSqlData().value;
if (ds!=null && typeof(ds)=="object" && ds.Tables!=null)
{
var sArray=new Array();
sArray[sArray.length] = "<table border=1>";
for(var i=0; i<ds.Tables[0].Rows.length; i++)
{
sArray[sArray.length] = "<tr>";
sArray[sArray.length] = "<td>" + ds.Tables[0].Rows[i].ID + "</td>";
sArray[sArray.length] = "<td>" + ds.Tables[0].Rows[i].Name + "</td>";
sArray[sArray.length] = "</tr>";
}
sArray[sArray.length] = "</table>";
var tableDisplay=document.getElementById('divContaine');
tableDisplay.innerHTML = sArray.join("");
}
else
{
alert('取从后台返回的ds时错误!');
}
}
在<body></body>
<input type="button" value="无刷新读取DataSet" οnclick="getDataSet()" />
<div id="divContaine" runat="server">
补充一点:我用的是AjaxPro.2.dll,版本为9.2.17.1,使用时发现有点小问题,在js获得数据后会报this.onTimeout is not a function 的脚本错误提示,参考网上的数法,先在AjaxPro的官网下载源码,然后打开core.js文件,在timeout:funtcion()里加入try{}...catch{}...finally{},然后再使用build.bat重新编译dll文件,其中build.bat文件中的set ZIP=E:/AjaxProSourceCode/7za904/这里是指免费压缩软件7za.exe所在路径,需要自行更改.core.js文件修改后如下