CustomValidator效果不佳

我有以下几片asp:

 

 Username:   * * 

然后function:

 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; } 

按钮:

  

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

在按钮的onclickfunction中,添加一个检查页面是否有效

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

应该这样做。 这是因为您的自定义validation程序设置为在回发期间在服务器上进行validation。 会发生的是代码首先运行validation器代码UserValidate ,您可以在其中设置IsValid标志。 在回发堆栈中的下一个是按钮的onclickfunction。 无论validation器函数中的结果如何,此函数都将运行,因此您需要检查IsValid标志的值。 这是在服务器端validation自定义validation控件时的行为。

另一种方法是在客户端进行validation。 如果查看浏览器生成的页面源代码,您会看到为RegularExpressionValidator添加了Javascript。 它的行为是已知的,并在客户端处理,因此不需要回发来评估表达式并validation页面(它全部由javascript处理)。 自定义validation程序function未知,因此除非您自己定义客户端validation脚本,否则需要回发。

这是有关MSDN的更多信息的链接。