4

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

4

5 回答 5

8

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

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

设置ControlToValidate属性。

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

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

function customClientValidationFunction(sender, arguments) {
   arguments.IsValid = true; //validation goes here
}
于 2012-07-27T09:46:08.520 回答
3

您应该ValidateEmptyText="true"CustomValidator. 在这种情况下,将始终调用客户端和服务器函数。

它为我解决了这个问题。

于 2012-09-12T11:55:04.620 回答
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
}
于 2012-07-01T01:42:08.483 回答
0

用这个

OnServerValidate="CustomValidator1_ServerValidate"

像一个例子,它会工作....

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

高拉夫·阿格拉瓦尔

于 2011-05-30T12:15:03.093 回答
0

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

于 2011-07-30T05:46:18.457 回答