6、主要基类:AjaxBasePage类

  如下代码:
public class AjaxBasePage : System.Web.UI.Page 

    /// <summary> 
    /// 是否是一个ajax请求。 
    /// </summary> 
    public bool IsAjaxRequest { get; private set; } 
 
    /// <summary> 
    ///  如果是Ajax请求,劫持页面生命周期的PreInit的事件,直接返回Response 
    /// </summary> 
    protected override void OnPreInit(EventArgs e) 
    { 
        AjaxRequest ajaxRequest = AjaxRequest.GetInstance(Request.Form); 
        this.IsAjaxRequest = ajaxRequest.IsAjaxRequest; 
 
        if (this.IsAjaxRequest) 
        { 
            AjaxApplication ajaxApplication = new AjaxApplication(this, ajaxRequest); 
            ajaxApplication.EndRequest(); 
        } 
        else
        { 
            // 如果不是Ajax请求,继续执行页面生命周期的剩余事件 
            base.OnPreInit(e); 
        } 
    } 
}

  该类重写了PreInit方法,判断请求是否是一个Ajax请求。通过AjaxRequest类接收并处理接收到的请求,提取出一些有效的数据,比如说是否是一个Ajax请求,方法的名字,参数列表(AjaxParameter类)。

  至于AjaxParameter类,内部用的数据结构其实是一个字典,并使用索引来提供对数据的方便访问,提供一个Count属性,方便获取参数的个数。

  如下代码:
public class AjaxParameter 
    { 
        private IDictionary<int, string> m_DictionaryParamsData = new Dictionary<int, string>(); 
  
        /// <summary> 
        /// 返回参数的个数。 
        /// </summary> 
        public int Count 
        { 
            get 
            { 
                return this.m_DictionaryParamsData.Count; 
            } 
        } 
  
        /// <summary> 
        /// 索引具体参数的值。 
        /// </summary> 
        /// <param name="index"></param> 
        /// <returns></returns> 
        public string this[int index] 
        { 
            get 
            { 
                if (index >= 5 || index < 0) 
                { 
                    throw new NotSupportedException("请求方法的参数的个数限制为:0-5"); 
                } 
                return this.m_DictionaryParamsData[index]; 
            } 
        } 
  
        public AjaxParameter(IDictionary<int, string> paramsData) 
        { 
            this.m_DictionaryParamsData = paramsData; 
        } 
    }