的CustomValidator工作不正常(CustomValidator not working

2019-07-29 23:40发布

我有下面这段ASP的:

<asp:ValidationSummary ID="RegisterUserValidationSummary" runat="server" CssClass="failureNotification" 
        ValidationGroup="RegisterUserValidationGroup"/>

...

<asp:Label ID="UserNameLabel" runat="server" AssociatedControlID="UserNameTB">Username:</asp:Label>
<asp:TextBox ID="UserNameTB" runat="server" CssClass="textEntry"></asp:TextBox>
<asp:RegularExpressionValidator ID="RegularExpressionValidator1" ControlToValidate="UserNameTB" 
      ValidationExpression="[a-zA-Z]{3,8}" ErrorMessage="Username must be between 3 to 8 chars" runat="server"
      CssClass="failureNotification" ToolTip="Username must be between 3 to 8 chars" ValidationGroup="RegisterUserValidationGroup">
    *</asp:RegularExpressionValidator>
<asp:CustomValidator ID="NoUserValidator" ControlToValidate="UsernameTB" runat="server" ErrorMessage="User Taken!" CssClass="failureNotification" 
      ValidationGroup="RegisterUserValidationGroup"  OnServerValidate="UserValidate">*</asp:CustomValidator>

然后该函数:

protected void UserValidate(object source, ServerValidateEventArgs args)
    {
        SqlDataSource1.SelectCommand = "SELECT ClientID FROM [Clients] WHERE Username= '" + UserNameTB.Text + "'";
        DataView dv = (DataView)SqlDataSource1.Select(DataSourceSelectArguments.Empty);
        if (dv.Table.Rows.Count != 0)
            args.IsValid = false;
        else
            args.IsValid = true;
    }

按钮:

<asp:Button ID="CreateUserButton" runat="server" CommandName="MoveNext" Text="Create User" 
       ValidationGroup="RegisterUserValidationGroup" 
       onclick="CreateUserButton_Click"/>

问题是,即使自定义验证函数被调用,并设置.IsValid为false,按钮逻辑仍然运行!

Answer 1:

在该按钮的onclick的功能,添加一个检查,看看是否页是有效的

protected void CreateUserButton_Click(object sender, EventArgs e)
{
    if (Page.IsValid)
    { 
        // Create the user
    }
}

这应该这样做。 这是因为你的自定义验证设置为验证服务器上,回发期间。 什么情况是,该代码首先运行验证码UserValidate ,你设置IsValid标志。 在回发栈接下来是按钮的onclick功能。 这个功能无论结果验证功能的运行,所以这就是你需要检查的值IsValid标志。 这是行为,当您验证在服务器端的自定义验证控件。

另一种方法是,以验证在客户端。 如果你看一下您的浏览器产生的网页源代码,你会看到,JavaScript是增加了RegularExpressionValidator 。 它的行为是已知的,并且在客户端进行处理,所以没有回后需要评估表达和验证页面(这是所有由JavaScript处理)。 自定义验证功能尚不清楚,所以除非你自己定义一个客户端验证脚本回发是必需的。

下面是更多信息的链接MSDN 。



文章来源: CustomValidator not working well