我有一个 CustomValidator,用于检查在文本框中输入的文本是否与数据库中的某些字段匹配。以前这一切都很好,但从那以后我对我的页面进行了相当多的修改,现在它不再工作了。我不认为我改变了任何会影响这一点的东西,但显然我做到了。我的所有其他验证器(必需的字段验证器)都正常工作,但我的 CustomValidator 没有响应。

所以无论如何,这是我的代码:

自定义验证器:

<asp:CustomValidator ID="CustomValidator1" runat="server" ControlToValidate="txtCoursePrefix" ErrorMessage="Course number is already taken."></asp:CustomValidator>

VB代码隐藏:
Protected Sub CustomValidator1_ServerValidate(ByVal source As Object, ByVal args As System.Web.UI.WebControls.ServerValidateEventArgs) Handles CustomValidator1.ServerValidate

    'Checking for duplicate course numbers

    'get values
    Dim checkPrefix = txtCoursePrefix.Text
    Dim checkNum = txtCourseNum.Text

    'db connectivity
    Dim myConn As New OleDbConnection
    myConn.ConnectionString = AccessDataSource2.ConnectionString
    myConn.Open()

    'select records
    Dim mySelect As New OleDbCommand("SELECT 1 FROM tableCourse WHERE prefix=? AND course_number=?", myConn)
    mySelect.Parameters.AddWithValue("@checkPrefix", checkPrefix)
    mySelect.Parameters.AddWithValue("@checkNum", checkNum)

    'execute(Command)
    Dim myValue = mySelect.ExecuteScalar()

    'check if record exists
    If myValue IsNot Nothing Then
        CustomValidator1.SetFocusOnError = True
        args.IsValid = False
    End If

End Sub

一切正常,直到 CustomValidator1.SetFocusOnError = True 和 args.IsValid = False。我已经测试了 If 语句并且它工作正常,它返回 true 并且我在它里面放置的任何其他东西都会执行。

最佳答案

使用 customvalidators 时你应该知道的事情:

如果您正在使用 ValidationGroup 进行验证,请不要忘记将其添加到您的 CustomValidator 中。

设置 ControlToValidate 属性。

CustomValidator 控件为空时,ControlToValidate 控件永远不会触发,除非您设置 ValidateEmptyText=true

使用 ClientValidationFunction="customClientValidationFunction" 时使用以下签名:

function customClientValidationFunction(sender, arguments) {
   arguments.IsValid = true; //validation goes here
}

10-08 00:36