我在做一个注册页面,用的是自定义验证控件,但是只有在提交的时候才能去验证,我想在失去焦点的时候就立即激发验证,不知道怎么实现。
前台代码:<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);
        }

解决方案 »

  1.   

    <asp:TextBox ID="userid" runat="server" onblur="this.form.submit();"
     CausesValidation="True" Wrap="False" Width="180px"></asp:TextBox>
      

  2.   

    搜索了资料,所可以在asp:TextBox 里面直接加属性 onblur 我测试了可以执行,但是vs提出警告,如果用这种方法,那么js函数如何写才能在文本框失去焦点的时候立即激发函数验证呢?
      

  3.   


    高手就是不一样,问题就这样解决了...昨天想了一天,回家的时候在公车上在想,睡觉的时候还在想,就是没想到办法,没想到如此简单....回2,用ajax也想过,觉得比较麻烦,直接用自定义控件验证比较方便些。