C# CustomValidator工作不正常

C# CustomValidator工作不正常,c#,asp.net,customvalidator,custom-validators,C#,Asp.net,Customvalidator,Custom Validators,我有以下一段asp: <asp:ValidationSummary ID="RegisterUserValidationSummary" runat="server" CssClass="failureNotification" ValidationGroup="RegisterUserValidationGroup"/> 按钮: <asp:Button ID="CreateUserButton" runat="server" CommandName="Mo

我有以下一段asp:

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

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

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

在按钮的onclick函数中,添加一个检查以查看页面是否有效

protected void CreateUserButton_Click(object sender, EventArgs e)
{
    if (Page.IsValid)
    { 
        // Create the user
    }
}
应该这样做。这是因为您的自定义验证器设置为在回发期间在服务器上进行验证。发生的情况是,代码首先运行验证器代码
UserValidate
,您在其中设置
IsValid
标志。回发堆栈中的下一个是按钮的onclick函数。无论验证程序函数中的结果如何,此函数都将运行,因此您需要在此处检查
IsValid
标志的值。这是在服务器端验证自定义验证控件时的行为

另一种方法是在客户端进行验证。如果您查看由浏览器生成的页面源代码,您将看到为
RegularExpressionValidator
添加了Javascript。它的行为是已知的,并且在客户端处理,因此不需要回发来计算表达式和验证页面(都由javascript处理)。自定义验证器函数未知,因此需要回发,除非您自己定义客户端验证脚本


这里有一个链接,指向有关的更多信息。

我不确定它是否有价值,但我也尝试设置NoUserValidator.IsValid=False我在标记中没有看到该按钮,但请确保它已将其ValidationGroup设置为您的RegisterUserValidationGroup。我已将按钮代码添加到msgThanks,并将其修复,你能解释一下为什么它可以与其他验证器配合使用,而对于自定义验证器,我必须添加你编写的内容吗?实际上,我不确定,所以我只是想猜测一下,但我认为这是因为其他验证器在客户端进行验证,而自定义验证器在服务器端进行验证。由于是服务器端,回发已经开始,您首先要执行自定义验证器,然后是按钮的单击功能。这有意义吗?将它们设置为runat=server只意味着服务器生成了它们,并且您可以在代码隐藏中访问它们。但是,如果您查看由浏览器生成的页面源代码,您将看到为regularexpressionvalidator添加了Java脚本。它的行为是已知的,因此不需要回发来计算表达式和验证页面(全部由javascript处理)。自定义验证器函数未知,因此需要回发(除非您使用javascript设置客户端验证脚本)。谢谢。这真的帮助了我。您有关于它的
MSDN
参考资料吗?或任何其他文章/博客参考?此链接描述得相当好
<asp:Button ID="CreateUserButton" runat="server" CommandName="MoveNext" Text="Create User" 
       ValidationGroup="RegisterUserValidationGroup" 
       onclick="CreateUserButton_Click"/>
protected void CreateUserButton_Click(object sender, EventArgs e)
{
    if (Page.IsValid)
    { 
        // Create the user
    }
}