注册用户页面代码如下
<script language="javascript" type="text/javascript">
var xmlHttp = false;

try ...{
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");

} catch (e) ...{

try ...{
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");

} catch (e2) ...{
xmlHttp = false;
}
}

if (!xmlHttp && typeof XMLHttpRequest != 'undefined') ...{
xmlHttp = new XMLHttpRequest();
}

function callServer() ...{
var u_name = document.getElementById("tbUserName").value;
if ((u_name == null) || (u_name == "")) return;
var url = "CheckUser.aspx?name=" + escape(u_name);
xmlHttp.open("GET", url, true);
xmlHttp.onreadystatechange = updatePage;
xmlHttp.send(null);
}

function updatePage() ...{

if (xmlHttp.readyState < 4) ...{
test1.innerHTML="loading...";
}

if (xmlHttp.readyState == 4) ...{
var response = xmlHttp.responseText;
test1.innerHTML=response;
}
// if (test1.innerHTML=="已被注册"){
// document.form1.submit.disabled=true}else{
// document.form1.submit.disabled=false
// }
}
</script>
<span id="test1"></span>
CheckUser.aspx:
asp.net页面代码如下:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="CheckUser.aspx.cs" Inherits="CheckUser" %>
<!--这个页里只能有上面的一行.不然不会返回数据-->
CheckUser.aspx.CS:
using *.*;
public partial class CheckUser : System.Web.UI.Page

...{
protected void Page_Load(object sender, EventArgs e)

...{
string nam = Request.QueryString["name"].ToString();
string sql = "select id from Users where username='" + nam + "'";
SqlDataReader dr = DBHelper.ExecuteReader(sql);
if (dr.Read())

...{
Response.Write("此用户名已经被注册");
}
else

...{
Response.Write("此用户名可以使用");
}
dr.Close();
}
}
现在好多网站上的注册都用了无刷新验证用户名,这种效果咋看感觉很复杂很难实现,其实它里面用到了Ajax中的核心xmlHttpRequest这个类,如果只是单单想实现这个效果,压根就不用引用Ajax.Net中的组件,因为感觉有点大材小用,下面是具体实现这种效果的方法,希望能给初学Ajax的朋友带来一点帮助.


首先建立一个注册与验证的页面xmlHttpRequest.aspx与Validate.aspx,因为仅仅是实现无刷新验证用户名,所以我们可以把其它项都撇开,Register.aspx中摆好div跟控件,具体如下:
<body>
<form id="form1" runat="server">
<div style="width: 100%; float: left; text-indent: 24px; font-size:12px">
<div style="float:left">
您的用户名:<asp:TextBox ID="txtUserName" runat="server" style="border:1px solid #D4D8D9" onblur="return ValidateUser();"></asp:TextBox>
</div> <div id="default" ></div>
</div>
</form>
</body>
然后我们可以写两个样式用于用户名通过验证或未通过验证的显示样式,未加入图片.

.Error{...}{ border:1px solid #A2553B;background-color:#FEF1E1;width:140px;float:left;height:18px;line-height:18px;margin-left:24px;color:#4F4F4F;text-indent:12px;}

.Right{...}{ border:1px solid #419041;background-color:#EDFCE7;width:140px;float:left;height:18px;line-height:18px;margin-left:24px;color:#4F4F4F;text-indent:12px;}
这两个样式你可以把它放到样式表中也可以将它放到<head></head>当中.
接下来只需敲一段脚本到注册的xmlHttpRequest.aspx页面去.
<script language="javascript" type="text/javascript">
function ValidateUser()

...{
//获得用于显示验证是否通过的详细信息
var obj=document.getElementById("default");
//获取用户输入的用户名的值
var str=document.getElementById("txtUserName").value;
//定义一个bool型变量
var chk=true;

if (chk)...{
//因为输入的用户名可能含有中文,所以将其解码
var username=escape(str);
//用于验证用户名的后台页面
var usrurl="/Validate.aspx?UserName="+username;
//获取从验证页面中异步传输过来的值
var sta=GetResponseText(usrurl);
//如果异步传输失败

if(sta==false)...{
chk=true;
obj.className="d_ok";
obj.innerHTML='该会员未能检测,可以尝试注册。';
}
//异步传输成功

else...{
//假如传过来的值的开始位置是"regok",这个值是在验证页面Response.Write出来的值,如果是regok则表示验证通过,否则的话就是验证失败.

if(sta.indexOf("regok")!=-1)...{
//验证通过
chk=true;
//用于显示验证是否通过的详细信息加上刚刚所定义正确时的样式
obj.className="Right";
obj.innerHTML='该会员名可以注册。';

}else...{
//验证未通过
chk=false;
//用于显示验证是否通过的详细信息加上刚刚所定义错误时的样式
obj.className="Error";
obj.innerHTML='该会员名已经被注册。';
}
}

}else...{
obj.className="Error";
}
return chk;
}
function GetResponseText(url)

...{
//定义一个http_request变量
var http_request;

if (window.XMLHttpRequest) ...{
//对于Mozilla、Netscape、Safari等浏览器,创建XMLHttpRequest对象
http_request = new XMLHttpRequest();

if (http_request.overrideMimeType) ...{
//如果服务器响应的header不是text/xml,可以调用其它方法修改该header
http_request.overrideMimeType('text/xml');
}

} else if (window.ActiveXObject) ...{
// 对于Internet Explorer浏览器,创建XMLHttpRequest

try ...{
http_request = new ActiveXObject("Msxml2.XMLHTTP");

} catch (e) ...{

try ...{
http_request = new ActiveXObject("Microsoft.XMLHTTP");

} catch (e) ...{}
}
}
//打开验证页面的地址
http_request.open('GET', url, false);
http_request.send(null);
if (http_request.readyState == 4)

...{
// 收到完整的服务器响应

if (http_request.status == 200) ...{
//HTTP服务器响应的值OK
var requestdoc = http_request.ResponseText;
}

else ...{
requestdoc = "error";
}
}
return requestdoc;
}
</script>
核心代码:
http_request.ResponseText这句是用于获取验证用户名页面中异步传输过来的值..
上面的代码做了详细的注释,这里就不多做解释了..
接下来验证用户名的页面中接收传过来的值进行判断了...
public partial class Validate : System.Web.UI.Page

...{
//获取url传过来的值
private string UserName

...{

get ...{ return Request.QueryString["UserName"].ToString(); }
}
protected void Page_Load(object sender, EventArgs e)

...{
//这里你可以连至用户表检查是否存在这个用户名,当然如果你用membership中的验证方法会更简洁.
if (Server.HtmlEncode(UserName) =="123456")
//还记得脚本中的if(sta.indexOf("regok")!=-1)这句吗,regok就是这里的啦..
Response.Write("regok");
else
Response.Write("error");
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构