CustomValidator не работает - PullRequest
4 голосов
/ 28 мая 2011

У меня есть CustomValidator, который проверяет, соответствует ли текст, введенный в текстовые поля, определенным полям в базе данных. Раньше все это прекрасно работало, но с тех пор я немного изменил свою страницу, и она больше не работает. Я не думал, что изменил что-нибудь, что могло бы повлиять на это, но, видимо, я это сделал. Все остальные мои валидаторы (обязательные валидаторы полей) работают правильно, но мой 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, и все, что я помещаю в него, выполняется.

Ответы [ 5 ]

7 голосов
/ 27 июля 2012

Вещи, которые вы должны знать при использовании customvalidator:

Если вы проверяете, используя ValidationGroup, не забудьте добавить его к вашему CustomValidator.

Установите ControlToValidate property.

Элемент CustomValidator никогда не срабатывает, когда элемент управления ControlToValidate пуст, если вы не установили ValidateEmptyText=true.

При использовании ClientValidationFunction="customClientValidationFunction" используйте следующую подпись:

function customClientValidationFunction(sender, arguments) {
   arguments.IsValid = true; //validation goes here
}
3 голосов
/ 12 сентября 2012

Вы должны установить свойство ValidateEmptyText="true" на CustomValidator. В этом случае всегда будут вызываться функции клиента и сервера.

Это решило проблему для меня.

1 голос
/ 01 июля 2012

Если вызывается обработчик, и вы успешно устанавливаете для 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
}
0 голосов
/ 30 июля 2011

Прежде всего, поместите группу проверки на валидаторы и кнопку.Если это тоже не работает, поместите OnClientClick = 'CheckValidate ();'и объявите функцию, которая будет вызывать метод page_clientvalidate вместе с параметром .. группа проверки.Это наверняка сработает.Если это не работает, поместите отладчик в метод javascript и отладьте его

0 голосов
/ 30 мая 2011

Используйте это

OnServerValidate = "CustomValidator1_ServerValidate"

как пример и будет работать ....

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

Гаурав Агравал

...