日期:2014-05-16 浏览次数:20664 次
这里我要实现类似AjaxPro组件调用效果的功能,先看看AjaxPro在CS文件中的代码是怎么写的。
//在后台写的有参方法 [AjaxPro.AjaxMethod] public string getString(string str) { return str + "Say: hello my friends"; }
前台页面的调用方式
function Button4_onclick() { var str=document.getElementByIdx_x("<%=TextBox1.ClientID %>").value; WebUI._Default.getString(str,getStringCallBack); }
这样的调用代码相当于在客户端直接执行了服务器端代码,然后取到执行结果,是不是有点意思,接下来我们就来自己把这类似的功能实现一把。
不过在实现之前你最好对反射和特性的基本运用有一定的了解,马上进入正题。
?
首先我们来理一下实现的思路
1.定义能应用在方法上的Ajax标识特性,因为并不是Page对象的所有方法都需要公开被调用,可以用特性做一个标记,可以通过MethodAliasName属性为方法设置一个方法别名,这样做的目的主要是为了安全和AJAX调用代码更简洁。
using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace AjaxInvokeDemo.Ajax { [AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = false)] public class AjaxMethodAttribute : Attribute { /// <summary> /// 设置ajax调用时的方法别名 /// </summary> public string MethodAliasName { get; set; } } }
?
2.定义页面基类,在里面实现一些公用的逻辑。比如获取要执行的方法的名称以及方法的参数,并通过反射对方法进行调用。具体还是看代码吧,可能更清楚一点。
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Runtime; using System.Reflection; using System.Collections.Specialized; na