ASP.NET WebForm也可以这样用Ajax
作者:网络转载 发布时间:[ 2013/4/2 9:53:36 ] 推荐标签:
AjaxRequest类的设计思路其实是模仿HttpContext设计,HttpContext能够从基础的http请求报文分析出以后处理将要用到的数据(response,request,session,cookie等等)数据,而AjaxRequest通过分析Ajax的Post请求的数据域 Data分析出各种以后会用到的数据。如下是该类的代码:
public class AjaxRequest
{
private Dictionary<int, string> m_DictionaryParamsData = new Dictionary<int, string>();
private AjaxParameter m_AjaxParameter;
private int m_Count = 0;
#region 属性
/// <summary>
/// 是否是一个Ajax请求。
/// </summary>
public bool IsAjaxRequest { get; private set; }
/// <summary>
/// 请求的方法名字。
/// </summary>
public string MethodName { get; private set; }
/// <summary>
/// 参数数据。
/// </summary>
public AjaxParameter Parameters
{
get { return this.m_AjaxParameter; }
}
#endregion
#region 构造函数
private AjaxRequest(NameValueCollection nameValueCollection)
{
this.IsAjaxRequest = nameValueCollection["isAjaxRequest"] == "true";
if (this.IsAjaxRequest)
{
this.MethodName = nameValueCollection["MethodName"];
foreach (string value in nameValueCollection)
{
string formKey = string.Format("param{0}", this.m_Count);
if (nameValueCollection[formKey] != null)
{
this.m_DictionaryParamsData.Add(this.m_Count, nameValueCollection[formKey]);
this.m_Count++;
}
}
m_AjaxParameter = new AjaxParameter(this.m_DictionaryParamsData);
}
}
#endregion
#region 实例方法
public static AjaxRequest GetInstance(NameValueCollection nameValueCollection)
{
return new AjaxRequest(nameValueCollection);
}
#endregion
#region ToString
public override string ToString()
{
return this.MethodName;
}
#endregion
}
通过分析AjaxRequest的属性IsAjaxRequest可判断是否为Ajax请求,若该请求为一个Ajax请求,那么创建一个AjaxApplication实例,在创建AjaxApplication实例的过程中会利用当前页面和AjaxRequest提供的数据进行实际方法的调用(反射),该类是执行Ajax方法的核心类,其中会判断是否读取的到的方法是一个有效的方法,并判断从JS中AjaxApplication传入的参数类型的有效性,目前只提供对以下13中参数提供支持,如下:
(String、Boolean、Int32、Int64、UInt32、UInt64、Single、Double、Decimal、DateTime、DateTimeOffset、TimeSpan、Guid)

sales@spasvo.com