我在做一个注册页面,用的是自定义验证控件,但是只有在提交的时候才能去验证,我想在失去焦点的时候就立即激发验证,不知道怎么实现。
前台代码:<div class="hang_text2">
<asp:TextBox ID="userid" runat="server"
CausesValidation="True" Wrap="False" Width="180px"></asp:TextBox></div>
<div class="hang_text3">
<asp:Label ID="Label1" runat="server" Text="英文或数字组合,长度为6-10位"></asp:Label>
<asp:CustomValidator ID="CustomValidator1" runat="server" ControlToValidate="userid" ErrorMessage="123" onservervalidate="check_id" ValidateEmptyText="True"></asp:CustomValidator>
</div>后台代码: public partial class userreg : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{ }
/// <summary>
/// 检查输入的用户名是否可以注册
/// </summary>
/// <param name="source"></param>
/// <param name="args">检查的字符</param>
protected void check_id(object source, ServerValidateEventArgs args)
{
if (args.Value.Length < 6 || args.Value.Length > 10 || isid("args") == false)
{
Label1.Text = "×错误,长度只能为6-10位,且只能为英文或数字";
Label1.ForeColor = Color.Red;
}
else
{
conn reader = new conn();
String sql = "Select * from [userdata] where username = '" + args.Value.ToString() + "'";
OleDbDataReader request = reader.MyDataReader(sql);
if (request.Read())
{
Label1.Text = "×输入的用户名已被注册,请更改。";
Label1.ForeColor = Color.Red;
}
else
{
Label1.Text = "√可以注册";
Label1.ForeColor = Color.Green;
}
reader.CloseDB();
}
}
/// <summary>
/// 验证id是否为数字或英文
/// </summary>
/// <param name="str">验证的字符</param>
/// <returns></returns>
public static bool isid(string str)
{
Regex reg1 = new Regex(@"^[A-Za-z0-9]+$");
return reg1.IsMatch(str);
}
}
前台代码:<div class="hang_text2">
<asp:TextBox ID="userid" runat="server"
CausesValidation="True" Wrap="False" Width="180px"></asp:TextBox></div>
<div class="hang_text3">
<asp:Label ID="Label1" runat="server" Text="英文或数字组合,长度为6-10位"></asp:Label>
<asp:CustomValidator ID="CustomValidator1" runat="server" ControlToValidate="userid" ErrorMessage="123" onservervalidate="check_id" ValidateEmptyText="True"></asp:CustomValidator>
</div>后台代码: public partial class userreg : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{ }
/// <summary>
/// 检查输入的用户名是否可以注册
/// </summary>
/// <param name="source"></param>
/// <param name="args">检查的字符</param>
protected void check_id(object source, ServerValidateEventArgs args)
{
if (args.Value.Length < 6 || args.Value.Length > 10 || isid("args") == false)
{
Label1.Text = "×错误,长度只能为6-10位,且只能为英文或数字";
Label1.ForeColor = Color.Red;
}
else
{
conn reader = new conn();
String sql = "Select * from [userdata] where username = '" + args.Value.ToString() + "'";
OleDbDataReader request = reader.MyDataReader(sql);
if (request.Read())
{
Label1.Text = "×输入的用户名已被注册,请更改。";
Label1.ForeColor = Color.Red;
}
else
{
Label1.Text = "√可以注册";
Label1.ForeColor = Color.Green;
}
reader.CloseDB();
}
}
/// <summary>
/// 验证id是否为数字或英文
/// </summary>
/// <param name="str">验证的字符</param>
/// <returns></returns>
public static bool isid(string str)
{
Regex reg1 = new Regex(@"^[A-Za-z0-9]+$");
return reg1.IsMatch(str);
}
}
CausesValidation="True" Wrap="False" Width="180px"></asp:TextBox>
高手就是不一样,问题就这样解决了...昨天想了一天,回家的时候在公车上在想,睡觉的时候还在想,就是没想到办法,没想到如此简单....回2,用ajax也想过,觉得比较麻烦,直接用自定义控件验证比较方便些。