CustomValidator无法正常工作

时间:2011-05-28 17:43:46

标签: asp.net vb.net validation customvalidator

我有一个CustomValidator,用于检查在文本框中输入的文本是否与数据库中的某些字段匹配。这之前一切都很好,但是从那时起我已经修改了很多页面并且它已经不再有效了。我不认为我改变了会影响这一点的任何事情,但显然我做了。我的所有其他验证器(必填字段验证器)都正常工作,但我的CustomValidator没有响应。

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

的CustomValidator:

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

VB codebehind:

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并且我放入其中的任何其他内容都会执行。

5 个答案:

答案 0 :(得分:7)

使用customvalidator时应该知道的事情:

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

设置ControlToValidate属性。

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

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

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

答案 1 :(得分:3)

您应该在ValidateEmptyText="true"上设置属性CustomValidator。在这种情况下,将始终调用客户端和服务器功能。

它解决了我的问题。

答案 2 :(得分:1)

如果调用处理程序,并且您成功将args.IsValid设置为false,那么它将Page.IsValid设置为false。但不幸的是,这并不能阻止这种形式的汇总。您需要做的是检查处理表单的代码中的Page.IsValid属性是否提交,如提交按钮处理程序。

因此,除了您发布的代码,听起来它工作正常,请确保您的提交处理程序(C#示例)有类似的内容:

protected void btnSubmit_Click(object sender, EventArgs e)
{
    if (!Page.IsValid)
    {
        // by simply returning, the error message for the CustomValidator will be displayed
        return;
    }
    // do processing for valid form here
}

答案 3 :(得分:0)

使用此

OnServerValidate = “CustomValidator1_ServerValidate”

就像一个例子,它会起作用....

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

Gaurav Agrawal

答案 4 :(得分:0)

首先,将验证组放在验证器和按钮上。如果这也不起作用,请将OnClientClick ='CheckValidate();'并声明将调用page_clientvalidate方法的函数以及参数.. validation group。这肯定会奏效。如果这不起作用将调试器放在javascript方法中并调试相同的