前段时间一直烦恼于无法利用JS调用后台的方法,现在终于学会点方法,觉得应该写下来与别人一起分享下,希望能够帮助一些和我一样的小鸟。
1.如果是调用后台的带返回值的无参数方法,那么<%=方法()%>无疑是最为简单的一 种方法。举个例子,比如你后台方法为public string s(){return "我很棒";}这样只要在前台这样写<script type="text/javascript">var a= <%=s()%>;alert(a);
</script>,这样你弹出的框中就会显示处“我很棒”。当然你也可以不用弹框,总之这样就可以调用到后台的方法,但是前提是它必须是有返回值的。也许你会说我要是想在前台给方法赋参数呢?那这种方法就不行,因为前台调用的方法在服务器加载的时候总是先运行的,所以没有等你的参数过去它就已经运行了。但是如果你的参数只是简单的字符串,那是可以的,举个例子:var id="中国";var a='<%=s("'+id+'")%>';alert(a);,后台的方法是:public string s(string x){return x+"很棒";},这样弹出框就会显示“中国很棒”。注意JS中双引号和单引号是没有区别的,其实"'+id+'"只是串字符串,没有任何意思。a获得后台方法的返回值,a="'+id+'"+"很棒"。相信大家因该明白了,前台是无法传递变量到后台的,只不过利用了连接字符串的形式将字符串当做参数,这样后台方法返回值后,id这个变量才被用上了。
2.这种方法是我觉得最好的一种调用后台的方法,网上也有很多地方说到,就是aJaxpro.使用这种方法
第一步:下载aJaxpro.dll文件,这个官网下就可以了,网址http://www.ajaxpro.info/;
第二步:就是添加引用,在你的项目中添加ajaxpro.dll的引用,这不用多说了吧;
第三步:在web.config添加节点
</script>,这样你弹出的框中就会显示处“我很棒”。当然你也可以不用弹框,总之这样就可以调用到后台的方法,但是前提是它必须是有返回值的。也许你会说我要是想在前台给方法赋参数呢?那这种方法就不行,因为前台调用的方法在服务器加载的时候总是先运行的,所以没有等你的参数过去它就已经运行了。但是如果你的参数只是简单的字符串,那是可以的,举个例子:var id="中国";var a='<%=s("'+id+'")%>';alert(a);,后台的方法是:public string s(string x){return x+"很棒";},这样弹出框就会显示“中国很棒”。注意JS中双引号和单引号是没有区别的,其实"'+id+'"只是串字符串,没有任何意思。a获得后台方法的返回值,a="'+id+'"+"很棒"。相信大家因该明白了,前台是无法传递变量到后台的,只不过利用了连接字符串的形式将字符串当做参数,这样后台方法返回值后,id这个变量才被用上了。
2.这种方法是我觉得最好的一种调用后台的方法,网上也有很多地方说到,就是aJaxpro.使用这种方法
第一步:下载aJaxpro.dll文件,这个官网下就可以了,网址http://www.ajaxpro.info/;
第二步:就是添加引用,在你的项目中添加ajaxpro.dll的引用,这不用多说了吧;
第三步:在web.config添加节点
<httpHandlers>
<add verb="POST,GET" path="ajaxpro/*.ashx" type="AjaxPro.AjaxHandlerFactory, AjaxPro.2"/>
</httpHandler>
第四步:在Page_Load()事件中添加注册。
AjaxPro.Utility.RegisterTypeForAjax(typeof(类名)),然后记得在你想调用的方法头前加上
[AjaxPro.AjaxMethod],就比如
[AjaxPro.AjaxMethod]
public DateTime GetServerTime()
{
return DateTime.Now;
}
第五步:最后就可以在JS中调用后台方法咯,记得调用方法格式:
命名空间.类名.方法(callback);举个例子吧,如果我这个类的命名空间是mYspace,类为Name,方法为delete(),
则应该这样调用mYspace.Name.delete(callback).callback;function callback(res){alert(res.value);}是你调用完方法后对结果的处理,res就是方法的返回值。你可以不要写callback,那就写成
mYspace.Name.delete()。当然如果你的方法带参数你就在括号里加参数。网上说还有另一种叫ajax.dll,如果你用的是这种,在web.config中添加节点有点不同,就是把type="AjaxPro.AjaxHandlerFactory, AjaxPro.2"改成
type="AjaxPro.AjaxHandlerFactory, Ajax"。还有就是调用的时候不用加空间名字,直接类名.方法()。
花了半个小时写好了,希望我的文章能够帮助别人,因为我也是经常看别人的文章获取知识,这和现在的开源很类似,大家把自己知道的东西都拿出来互相学习嘛!