在验证会员名时使用了Ajax局部无刷新功能。要实现局部无刷新,首先应该添加2个控件,即ScriptManager控件和UpdataPanel控件。ScriptManager控件又称为脚本管理控件,它能够管理Web页上的脚本。同时使用ScriptManager控件和UpdatePanel控件,可实现界面无刷新的Web环境。ScriptManager控件不但能够动态创建与Web服务器相关的脚本,而且这些脚本也能支持Web页上的局部更新功能。
目前比较流行的无刷新验证会员名的方式是,当用户输入会员名后,再单击其他文本框时,将会自动提示用户输入的会员名是否已注册
实现这种方式首先需要将用来输入会员名的文本框控件和提示是否已注册的Label控件添加到UpdatePanel控件中,这样就可以实现局部更新功能。Label控件提示会员名是否已注册,主要是通过使用文本框中的txtChanged事件来实现。该事件是在文本框内容发生改变且失去焦点时引发的。必须注意的是,使用该事件还需要将文本框AutoPostBack属性设置为True,使文本修改后自动回发到服务器。在TxtChanged事件中通过SQL语句来查询用户输入的会员名是否存在于数据表中,如果存在,则将设置label控件进行提示,否则将提示会员名可以注册
例:
Register.aspx
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
会员名: <asp:TextBox onFocus="tName();" ID="txtName" runat="server" Width="89px" OnTextChanged="txtName_TextChanged"></asp:TextBox>
<asp:RequiredFieldValidator ID="rfvName" runat="server" ErrorMessage="用户名不能为空" Width="1px"
ControlToValidate="txtName">*</asp:RequiredFieldValidator>
<asp:Label ID="labUser" runat="server" Text="只能输入数字、字母、下划线" Width="159px" Font-Size="12px"></asp:Label>
<asp:Label ID="labIsName" runat="server" Font-Size="12px"></asp:Label>
</ContentTemplate>
</asp:UpdatePanel>
Register.aspx.cs
protected void txtName_TextChanged(object sender, EventArgs e)
{
//判断用户名是否为空
if (txtName.Text == "")
{
//使用Label控件给出提示
labIsName.Text = "用户名不能为空";
//设置Label控件的颜色
labIsName.ForeColor = System.Drawing.Color.Red;
}
else
{
//调用自定义isNameFormar方法判断用户名是否满足格式要求
if (isNameFormar())
{
//调用isName自定义方法判断用户名是否已注册
if (isName())
{
labIsName.Text = "用户名已存在!";
labIsName.ForeColor = System.Drawing.Color.Red;
}
else
{
labIsName.Text = "可以注册!";
labIsName.ForeColor = System.Drawing.Color.Blue;
}
}
else
{
labIsName.Text = "";
}
}
}
protected bool isName()
{
//创建一个布尔型变量并初始化为false;
bool blIsName = false;
//创建SQL语句,该语句用来判断用户名是否存在
string sqlSel = "select count(*) from tb_userInfo where userName='" + txtName.Text + "' ";
//创建数据库连接
SqlConnection con = new SqlConnection("server=LENOVO-PC//SQLEXPRESS;database=db_Register;uid=sa;pwd=;");
//打开数据库连接
con.Open();
//创建SqlCommand对象
SqlCommand com = new SqlCommand(sqlSel, con);
//判断ExecuteScalar方法返回的参数是否大于0,大于表示用户名已存在
if (Convert.ToInt32(com.ExecuteScalar()) > 0)
{
blIsName = true;
}
else
{
blIsName = false;
}
//返回布尔值变量
return blIsName;
}
protected bool isNameFormar()
{
//创建一个布尔型变量并初始化为false;
bool blNameFormar = false;
//设置正则表达式
Regex re = new Regex("^//w+$");
//使用Regex对象中的IsMatch方法判断用户名是否满足正则表达式
if (re.IsMatch(txtName.Text))
{
//设置布尔变量为true
blNameFormar = true;
//设置label控件的颜色
labUser.ForeColor = System.Drawing.Color.Black;
}
else
{
labUser.ForeColor = System.Drawing.Color.Red;
blNameFormar = false;
}
//返回布尔型变量
return blNameFormar;
}