日期:2014-05-16  浏览次数:20612 次

反射+特性打造简洁的AJAX调用

这里我要实现类似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