ashx一般处理程序在ASP.NET Ajax中的应用

2020-08-06 00:58
淮北职业技术学院学报 2020年4期
关键词:用户名服务器端控件

冯 菁

(淮北职业技术学院 计算机科学与技术系,安徽 淮北 235000)

0 引言

ashx一般处理程序,可用它来处理Ajax请求,通过继承HttpHandler类(或是实现IHttpHandler接口),从而免去了普通aspx页面控件解析以及页面处理的过程。[1]NET Framework在默认情况下,把aspx WEB页面的Request请求交给HttpHandlerFactory来处理的,当页面的一个HTTP请求到达时,HttpHandlerFactory会提供出一个HttpHandler容器,HTTP请求最终交给HttpHandler容器中的ProcessRequest方法来处理的。Ajax是Asynchronous JavaScript and XML的缩写,即异步JavaScript和XML技术。[2]通过该技术的使用,实现了页面的局部刷新,减小了网络流量,改善用户体验,提升了系统的运行速度。在ASP.NET中结合使用JQuery+ashx一般处理程序,实现Ajax技术。

1 ASP.NET Ajax架构

ASP.NET Ajax使得Ajax程序设计变得简单,使用ASP.NET中的Ajax可快速创建包含具有快速响应能力且熟悉的用户界面元素的网页,丰富了用户的体验。[2]ASP.NET Ajax中的JavaScript是跨平台的,支持多个浏览器,不会因PostBack而让整个页面重新加载造成闪动,可以实现Web页面局部更新,异步取回服务器端的数据,用户无需等待也不被打断,提升页面响应能力。

1.1 ASP.NET Ajax组成

ASP.NET Ajax主要有四个部分,Ajax服务器端控件、Ajax服务器端扩展控件、Ajax服务器端远程Web Service桥、Ajax客户端代理。[3]ASP.NET从4.0版开始,完全集成了Ajax框架,在Visual Studio 2010及以上版本中工具箱里就可以找到Ajax控件.ASP.NET Ajax客户端架构主要有API、API函数、基础类库、封装的XMLHttpRequest对象、Ajax XML引擎、ASP.NET Ajax客户端控件等。[3]

在Ajax应用中,Ajax引擎相当于中间通讯层,Web页面HTTP请求通过Ajax引擎与服务器端进行通信,响应返回的结果提交给Ajax引擎,再由Ajax引擎来决定将这些数据显示到页面的指定位置.在Ajax中,变成对Ajax引擎的一次调用.只对部分页面进行更新。[3]

Ajax Web页面的工作过程如图1所示:

图1 Ajax工作过程

2 ashx一般处理程序

一般处理程序HttpHandler是一种.NET WEB组件,扩展名为.ashx 文件,采用它来处理Ajax请求,当文件需要动态返回来自查询字符串或XML和其它非HTML网页的图像时。采用JQuery和.NET技术,ashx页面接收参数,然后返回值.浏览页面时是无法看到编写的源代码的.ashx文件在.NET中要继承IHttpHandler接口,该接口里有IsReusable成员,指定IHttpHandler实例是否可以用来处理多个请求、方法ProcessRequest(HttpContext context)处理接受到的Http请求。

3 Ajax+ashx实现页面异步加载

各类WEB应用中都有数据库的访问操作,注册是一个常用的功能。应用Ajax设计ASP.NET Web注册页面,Ajax无刷新感检测用户名。测试用户名是否重名,只刷新部分页面。

具体设计思路如下:

(1)需要一个一般处理程序.ashx,传入用户名进行检索,设计Select语句,如果用户名已使用或未使用返回一个不同值的标识变量。

(2)使用JQuery的ajax,这里使用JQuery.get()方式,请求刚才的ashx文件,并将用户名作为参数传过去,get()是Request.QueryString接收,Ajax过程完成之后会返回标识变量,再根据此标识确定是否可以使用新填写的注册用户名。

3.1 注册界面

注册界面设计如图2所示:需在网站主目录中添加JQuery插件jquery-1.4.1-vsdoc.js, 在页面加上JQuery插件.

图2 注册页面界面

3.2 一般处理程序isName.ashx

使用.ashx文件(一般处理程序)实现IHTTPHandler接口,不像aspx要继承Page类,处理控件和事件等, HttpHandler是HTTP请求的真正处理中心,直接用于处理客户端发送来的请求,并将服务器端的处理结果返回给客户端.ashx文件的具体处理过程要比aspx要简单得多。

继承IHttpHandler接口,重写ProcessRequest方法(),并添加数据库里查找指定用户名的方法IsNName().

关键代码如下:public void ProcessRequest (HttpContext context) {

定义字符串变量resp;

string strName = context.Request.QueryString["userName"];

if (IsNName(strName))

{字符串resp变量值为”1”或”0”}

输出数据(resp);

……

}

private bool IsNName(string strName)

{

bool boolName;

连接数据库;

查找用户表是否有strName这条记录;

查找结果放入boolName真假值;

3.3 JQuery使用

在注册Web页面中,用户名文本框失去焦点事件CheckUsername(),HTML+JavaScript用$.ajax(url)这个函数发送数据到ashx文件,此文件用Request.QueryString[...]接收数据。

关键代码如下:

function CheckUsername() {

strName获取文本框的值;

flag开关;

$.ajax({

……

url: "../ajax/IsName.ashx?userName=" + encodeURI(strName),

success: function(msg) {

{根据返回信息,给出用户名是否可用,并设置开关flag}

返回flag

}

3.4 运行效果

页面即时出现提示用户名是否可用,用户无刷新抖动的感觉。

图3 用户名检测即时效果

4 其它技术实现Ajax.

在ASP.NET中实现Ajax,可根据个人习惯使用JavaScript、jquery插件,还可以选择.NET自己封装的Ajax控件,方法各有特点。

使用Ajax扩展EXT 控件,优势在于支持UI,需安装AjaxControlToolkit,或是需要添加引用System.Web.Extensions.dll。在建Ajax页面时一定先添加ScriptManager控件, 执行Ajax JavaScript库的链接,才能让Page局部更新起作用。[3]再添加UpdatePanel控件,并在其ContentTemplate内容模板添加内置控件、表格、HTML代码等.这样可以使用很少的客户端脚本或不使用客户端脚本就能创建丰富的客户端行为,局部更新可避免整页回发的开销。需要在Web.Config的元素中添加或修改元素。

NET Framework 4.0之前版本中使用ASP.NET Ajax ,需要在ScriptManager控件所在页面,通过脚本调用Web 服务,要指明Web服务所在的文件地址,[4]扩展名为asmx Web Service文件,WebServices+JQuery可实现Ajax页面部分刷新;在.NET Framework 4.0以后版本Ajax中调用WCF服务。

5 总结

通过ashx来调用HttpHandler类,HttpHandler是一个彻底自定义Http请求方法,ashx少了处理了html的过程。免去了普通.aspx页面的控件解析以及页面处理的过程,直接返回Web http请求想要返回的结果,速度快.ashx文件适合产生供浏览器处理的、不需要回发处理的数据格式,例如生成动态图片、动态文本等内容。

.ashx文件也有缺点,它处理控件的回发事件非常麻烦,需自己手动完成;并且它只能处理一个请求,如有多个请求需写对应的多个ashx文件。

猜你喜欢
用户名服务器端控件
《护士进修杂志》投稿程序
《护士进修杂志》投稿程序
基于.net的用户定义验证控件的应用分析
Linux环境下基于Socket的数据传输软件设计
《护士进修杂志》投稿程序
关于.net控件数组的探讨
机智的快递员
基于Qt的安全即时通讯软件服务器端设计
基于Qt的网络聊天软件服务器端设计
基于C/S架构的嵌入式监控组态外设扩展机制研究与应用