让aspx也能象ashx一样可以handle异步请求

这阶段在做jquery的时候发觉公司有个很不错的架构,直接用aspx来模拟异步请求,不需要把页面定义为ashx文件来.

首先,定义一个基类:

 

 /// <summary>
    /// Ajax处理的基类页面。
    /// </summary>
    public class AjaxBasePage : SecureBasePage
    {
        #region 属性

        #region 属性
        protected FormManager FormManager
        {
            get { return new FormManager(HttpContext.Current.Request); }
        }

        #endregion
        
        /// <summary>
        /// 返回Ajax页面的Response
        /// </summary>
        /// <param name="jsonMessage">结果消息</param>
        protected void SetEndResponse(string jsonMessage)
        {
            Response.Clear();
            Response.Write(jsonMessage);
            Response.End();
        }

        #endregion
    }


FormManager如下:

 

  /// <summary>
    /// 网站Form内容管理辅助类
    /// </summary>
    public class FormManager
    {
        #region  字段 & 属性
        private const string KEY_FORM_CONTEXT = "KeyFormManagerContext";
        private HttpRequest _currentRequest;
        public static FormManager Current
        {
            get
            {
                if (HttpContext.Current.Items[KEY_FORM_CONTEXT] == null)
                {
                    HttpContext.Current.Items[KEY_FORM_CONTEXT] = new FormManager(HttpContext.Current.Request);
                }

                return HttpContext.Current.Items[KEY_FORM_CONTEXT] as FormManager;
            }
        }

        #endregion

        #region  方法
        /// <summary>
        /// 构造方法
        /// </summary>
        /// <param name="request">当前Http请求</param>
        public FormManager(HttpRequest request)
        {
            _currentRequest = request;
        }

        /// <summary>
        /// 获取Form的值
        /// </summary>
        /// <param name="paramName">参数值</param>
        /// <returns>参数返回值</returns>
        public NameValueCollection NameValueCollection
        {
            get { return _currentRequest.Form; }
        }

        /// <summary>
        /// 获取Form的值
        /// </summary>
        /// <param name="paramName">参数值</param>
        /// <returns>参数返回值</returns>
        public string[] GetValues(string valueName)
        {
            return _currentRequest.Form.GetValues(valueName);
        }

        /// <summary>
        /// 获取Form的值
        /// </summary>
        /// <param name="paramName">特定参数前缀</param>
        /// <returns>参数返回值集合</returns>
        public NameValueCollection GetCollectionStartWithSpecialName(string valueName)
        {
            NameValueCollection result = new NameValueCollection();
            NameValueCollection allNameValueCollection = _currentRequest.Form;

            foreach (string name in allNameValueCollection.AllKeys)
            {
                if (name.ToUpper().Trim().StartsWith(valueName.ToUpper().Trim()))
                {
                    result.Add(name, GetFormValue(name));
                }
            }
            return result;
        }

        /// <summary>
        /// 获取Form的值
        /// </summary>
        /// <param name="paramName">参数值</param>
        /// <returns>参数返回值集合</returns>
        public NameValueCollection GetCollectionEqualSpecialName(string valueName)
        {
            NameValueCollection result = new NameValueCollection();
            NameValueCollection allNameValueCollection = _currentRequest.Form;

            foreach (string name in allNameValueCollection.AllKeys)
            {
                if (name.ToUpper().Trim().Equals(valueName.ToUpper().Trim()))
                {
                    result.Add(name, GetFormValue(name));
                }
            }
            return result;
        }


        /// <summary>
        /// 获取Form的值
        /// </summary>
        /// <param name="paramName">参数值</param>
        /// <returns>参数返回值</returns>
        public string GetRequestFormValue(string valueName)
        {
            return GetFormValue(valueName);
        }

        /// <summary>
        /// 获取Form的值
        /// </summary>
        /// <param name="paramName">参数值</param>
        /// <returns>参数返回值</returns>
        public string GetFormValue(string paramName)
        {
            if (string.IsNullOrEmpty(_currentRequest.Form.Get(paramName)))
            {
                return string.Empty;
            }

            return _currentRequest.Form.Get(paramName).Trim();
        }

        #endregion

        #region Form 参数名称

        //地址相关
        public const string RECIPIENT_PARAM = "Recipient";
        public const string POST_CODE_PARAM = "PostCode";
        public const string CITY_PARAM = "City";
        public const string CITY_NAME_PARAM = "CityName";
        public const string PROVINCE_PARAM = "Province";
        public const string PROVINCE_NAME_PARAM = "ProvinceName";
        public const string DISTRICT_PARAM = "District";
        public const string DISTRICT_NAME_PARAM = "DistrictName";
        public const string ADDRESS_PARAM = "Address";
        public const string AMOUNT_PARAM = "Amount";

        //发票相关
        public const string IS_NEED_INVOICE_PARAM = "bill_select";
        public const string ADDRESS_ID_PARAM = "AddressID";
        public const string INVOICE_DESCRIPTION_PARAM = "InvoiceDescription";
        public const string INVOICE_HEAD_PARAM = "InvoiceHead";
        public const string INVOICE_CONTENT_ID_PARAM = "InvoiceContentID";

        //操作类别
        public const string ACTION_PARAM = "Action";

        //订单相关
        public const string IS_NEED_BLOCK_PARAM = "IsNeedBlock";

        #region add by hanlihui 2011-07-04
        //充值客户信息相关
        public const string HASCUSMINFO_PARAM = "HasCusmInfo";
        public const string REALNAME_PARAM = "RealName";
        public const string IDCARD_PARAM = "IdCard";
        public const string MOBILEPHONE_PARAM = "MobilePhone";
        public const string AREACODE_PARAM = "AreaCode";
        public const string TELEPHONE_PARAM = "Telephone";
        public const string TELEXTENSION_PARAM = "TelExtension";
        #endregion

        //是否繁体
        public const string IS_BIG5 = "IsBig5";

        public const string TICKET_TYPE = "TicketType";

        public const string INVOICE_CONTENT = "InvoiceContent";

        #endregion

        #region Form 参数值
        //地址相关
        public string Recipient
        {
            get { return GetFormValue(RECIPIENT_PARAM); }
        }
        public string PostCode
        {
            get { return GetFormValue(POST_CODE_PARAM); }
        }
        public string City
        {
            get { return GetFormValue(CITY_PARAM); }
        }
        public string CityName
        {
            get { return GetFormValue(CITY_NAME_PARAM); }
        }
        public string Province
        {
            get { return GetFormValue(PROVINCE_PARAM); }
        }
        public string ProvinceName
        {
            get { return GetFormValue(PROVINCE_NAME_PARAM); }
        }
        public string District
        {
            get { return GetFormValue(DISTRICT_PARAM); }
        }
        public string DistrictName
        {
            get { return GetFormValue(DISTRICT_NAME_PARAM); }
        }
        public string Address
        {
            get { return GetFormValue(ADDRESS_PARAM); }
        }
        public string Amount
        {
            get { return GetFormValue(AMOUNT_PARAM); }
        }

        //发票相关
        public string IsNeedInvoice
        {
            get { return GetFormValue(IS_NEED_INVOICE_PARAM); }
        }

        public string AddressID
        {
            get { return GetFormValue(ADDRESS_ID_PARAM); }
        }

        public string InvoiceDescription
        {
            get { return GetFormValue(INVOICE_DESCRIPTION_PARAM); }
        }

        public string InvoiceHead
        {
            get { return GetFormValue(INVOICE_HEAD_PARAM); }
        }

        public string InvoiceContentID
        {
            get { return GetFormValue(INVOICE_CONTENT_ID_PARAM); }
        }
        //操作类别
        public string Action
        {
            get { return GetFormValue(ACTION_PARAM); }
        }

        //订单相关
        public string IsNeedBlock
        {
            get { return GetFormValue(IS_NEED_BLOCK_PARAM); }
        }

        #region add by hanlihui 2011-07-04
        //充值客户信息相关
        public string HasCusmInfo
        {
            get { return GetFormValue(HASCUSMINFO_PARAM);}
        }

        public string RealName
        {
            get { return GetFormValue(REALNAME_PARAM); }
        }

        public string IdCard
        {
            get { return GetFormValue(IDCARD_PARAM); }
        }

        public string MobilePhone
        {
            get { return GetFormValue(MOBILEPHONE_PARAM); }
        }

        public string AreaCode
        {
            get { return GetFormValue(AREACODE_PARAM); }
        }

        public string Telephone
        {
            get { return GetFormValue(TELEPHONE_PARAM); }
        }

        public string TelExtension
        {
            get { return GetFormValue(TELEXTENSION_PARAM); }
        }
        #endregion


        //是否繁体
        public string IsBig5
        {
            get { return GetFormValue(IS_BIG5); }
        }

        public int TicketType
        {
            get { return Convert.ToInt32(GetFormValue(TICKET_TYPE)); }
        }

        public string InvoiceContent
        {
            get { return GetFormValue(INVOICE_CONTENT); }
        }

        #endregion

  通过NameValueCollection来保存窗体类,来处理异步请求.

JavaScript(简称JS)是一种脚本语言,常用于网页上的交互效果和动态网页开发。JS具有单线程执行的特性,即一次只能执行一个任务。当任务执行时间过长时,会阻塞用户界面的响应。为了解决这个问题,JS引入了异步编程的概念。 ashx是一种后缀名为.ashx的文件,通常用于处理网页请求。ashx文件内部的代码可以与服务器进行交互,并返回处理结果。JS异步使用ashx文件的目的是为了在与服务器进行通信时不阻塞用户界面。 使用JS异步调用ashx文件时,可以发送AJAX请求。AJAX是一种在不刷新整个网页的前提下,通过在后台与服务器进行少量数据交换的技术。通过AJAX,可以向ashx文件发送请求并获得服务器处理的结果。 JS可以通过XMLHttpRequest对象或者fetch API来发送AJAX请求。具体而言,可以创建一个XMLHttpRequest对象,通过open()方法指定请求的URL,通过send()方法发送请求,通过回调函数处理返回的结果。在这个过程中,JS会异步发送请求给ashx文件,而不会阻塞用户界面的操作。 ashx文件在接收到请求后,可以通过处理参数,与数据库进行交互,进行一些数据处理操作,然后将结果返回给JS。JS再通过回调函数拿到返回的结果,并进行相应的操作。 总之,JS异步调用ashx是为了避免任务阻塞用户界面,通过AJAX方式将请求发送给ashx文件,并通过回调函数获取服务器处理的结果。这样,用户界面可以同时进行其他操作,提高用户体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值