AARON TSAI
POET CLASSICAL PASSION AND REFINEMENT

冥冥中这个web2.0的精灵,抓住了我的视线,我为之奋斗了一个下午,终于做了一个小应用嘿嘿,分享一下

如果没有装.NET Framework 3.0,也可以做一个Ajax的程序。

首先需要一个封装XMLHttpRequest对象的Ajax框架,这个可以自己写一个框架,包括提出请求的客户端和一个处理请求的服务器端,也就是两个.cs文件,问题不大。也可以用一些开源的Ajax框架,由于想快速完成,我选择了一个名为AjaxPro.Net的一个优秀的开源框架,需要上网下载,网址:http://www.schwarz-interactive.de/

下载完以后,解压,得到几个dll的动态库和一个web.config的文件,先放在那里等等需要用。

打开VS2005,创建一个web的网站

添加引用(点击右键,打开“添加引用”“浏览”)添加刚才解压的AjaxPro.2.dll库,而AjaxPro.dll文件是在.NET Framework 1.1里面添加的(就这个问题困扰我很久,我晕)

然后添加一个web.config文件

代码为:

 

 1<?xml version="1.0"?>
 2<configuration>
 3
 4  <system.web>
 5  <httpHandlers>
 6   <add verb="POST,GET" path="ajaxpro/*.ashx" type="AjaxPro.AjaxHandlerFactory,AjaxPro.2"/>
 7  </httpHandlers>
 8  <compilation debug="true"/></system.web>
 9</configuration>
10

 

注:这里面的AjaxPro.AjaxHandlerFactory是用于拦截用户向ajaxpro/*.ashx的post跟get的请求。

 

然后开始设计页面

添加一个name为tbUsername的文本框

一个name为lblMessage的Label标签

两个控件已经足以。

 

 

 1<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>
 2
 3<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 4
 5<html xmlns="http://www.w3.org/1999/xhtml" >
 6<head runat="server">
 7    <title>Default</title>
 8
 9<script type="text/jscript">
10        function DefaultUsername(name)
11        {
12            _Verify.GetReturnCode(name,IsUsernameExist_callback);
13        }

14        function IsUsernameExist_callback(res)
15        {
16            var msg = document.getElementById('lblMessage');
17            var bRet = res.value;
18            if(bRet=="0")
19            {
20                msg.innerHTML='用户名已存在';
21                msg.style.color='green';
22            }

23            else if (bRet=="1")
24            {
25                msg.innerHTML = '用户名长度必须在3到15之间,且不包含字母,数字和下划线以外的字符';
26                msg.style.color='red';
27            }

28            else
29            {
30                msg.innerHTML='用户名不存在';
31                msg.style.color='red';
32            }

33        }

34</script>
35</head>
36<body>
37    <form id="form1" runat="server" method="post">
38    <div>
39        <h1>
40            Ajax验证数据</h1>
41        <br />
42        <hr />
43        &nbsp;name:
44        <asp:TextBox ID="tbUsername" runat="server" on=key=up(应该连写校内比较变态,不许用这个关键字)="DefaultUsername(this.value)"/>
45        <br />
46        <br />
47        <asp:Label ID="lblMessage" runat="server" Height="36px" Width="315px"></asp:Label><br />
48    
49    </div>
50    </form>
51</body>
52</html>
53
54

 

注:1.其中<script type="text/jscript">部分是jscript代码,当客户端加载程序的时候可以调用后代码来实现XML数据的异步传输,达到验证的目的。也可以添加一个.js的文件,然后在刚才的地方用以下代码替换。<script type="text/jscript" src="文件名" />

2.在<asp:TextBox ID="tbUsername" runat="server" on=key=up="DefaultUsername(this.value)"/>中on=key=up事件是当弹起键盘上的键时需要处理的事件,在web控件里面根本没有这个属性,vs也会提示出错,不过一切程序还是最终要发送到客户端的,所以这个完全可以留着,如果还觉得不爽,可以在Default.aspx.cs后代码的Page_Load里面添上this.tbUsername.Attributes.Add("on=Key=up","Default(this.value)");

 

以下是Default.aspx.cs后代码:

 

 1using System;
 2using System.Data;
 3using System.Configuration;
 4using System.Web;
 5using System.Web.Security;
 6using System.Web.UI;
 7using System.Web.UI.WebControls;
 8using System.Web.UI.WebControls.WebParts;
 9using System.Web.UI.HtmlControls;
10using System.ComponentModel;
11using System.Drawing;
12using System.Web.SessionState;
13using System.Text.RegularExpressions;
14
15public partial class _Default : System.Web.UI.Page 
16{
17    protected void Page_Load(object sender, EventArgs e)
18    {
19        AjaxPro.Utility.RegisterTypeForAjax(typeof(_Default));
20    }

21    [AjaxPro.AjaxMethod]
22    public string GetReturnCode(string strUsername)
23    {
24        if (!IsDefaultUsername(strUsername))
25        {
26            return "1";
27        }

28        else if (!IsUsernameExist(strUsername))
29        {
30            return "2";
31        }

32        else
33        {
34            return "0";
35        }

36    }

37    private bool IsUsernameExist(string strUsername)
38    {
39        bool bRet = false;
40        switch (strUsername.ToLower())
41        {
42            case "abcd":
43            case "efgh":
44            case "ijkl":
45            case "mnop":
46            case "caikaijing":
47                bRet = true;
48                break;
49        }

50        return bRet;
51    }

52    private bool IsDefaultUsername(string strUsername)
53    {
54        return (Regex.IsMatch(strUsername, @"^(\w{3,15})$"));
55    }

56}

57
58

注:1.Page_Load里面必须添加上AjaxPro.Utility.RegisterTypeForAjax(typeof(_Default));,这一句的意思是用于服务器端向客户端生成网页的时候添加上以下两端:

 

1<script type="text/" src="/ajaxpro/core.ashx"></script>
2
3<script type="text/" src="/ajaxpro/Verify,ashx"></script>
4

 

2.在每个定义的类的前面必须添加[AjaxPro.AjaxMethod]引用

就这样一个基于AjaxPro.NET的数据验证就完成了。

posted on 2007-11-23 23:21  烂菜  阅读(2682)  评论(0)    收藏  举报