Пользовательский валидатор

Поэтому у меня есть собственный валидатор, который работает только частично. В основном он проверяет две вещи: заполнены ли два поля и существует ли то, что было введено в эти поля, уже в базе данных. Проверка по базе данных работает нормально, но проверка, заполнены ли поля или нет, - нет. Я не хочу использовать обязательные валидаторы полей, так как я хочу, чтобы все сообщения об ошибках находились в одном и том же месте на странице. Я почти уверен, что просто что-то напутал, но просто не могу найти.

<strong>Course Prefix and Number:</strong>
<asp:TextBox ID="txtCoursePrefix" runat="server" Width="45" MaxLength="4" CssClass="caps"></asp:TextBox>
-
<asp:TextBox ID="txtCourseNum" runat="server" Width="45" MaxLength="6" CssClass="caps"></asp:TextBox>
<span class="required">*
<asp:CustomValidator ID="cvDuplicate" runat="server" ControlToValidate="txtCoursePrefix" ValidateEmptyText="true"></asp:CustomValidator>
</span>

Код позади:

'Check if fields have been filled out
    If txtCoursePrefix.Text Is Nothing Or txtCourseNum.Text Is Nothing Then
        cvDuplicate.ErrorMessage = "Required"
        args.IsValid = False
    End If
'Code that checks values against database goes here
'If matching record does not exist...
    If myValue IsNot Nothing Then
        cvDuplicate.ErrorMessage = "Course number is already taken."
        args.IsValid = False
    End If

Итак, еще раз, это первая часть, которая не работает, вторая часть работает нормально.

3 ответа

Решение

Возможно, текстовое поле считается пустой строкой, а не Nothing. Попробуйте это для проверки:

If String.IsNullOrEmpty(txtCoursePrefix.Text) Or String.IsNullOrEmpty(txtCourseNum.Text) Then
    cvDuplicate.ErrorMessage = "Required"
    args.IsValid = False
End If

2 вещи должны быть проверены

  1. Добавить следующее FieldRequired="True"
    <asp:CustomValidator ID="cvDuplicate" runat="server" ControlToValidate="txtCoursePrefix" ValidateEmptyText="true" FieldRequired="True"></asp:CustomValidator>

  2. На стороне сервера проверьте, настроено ли какое-либо следующее место this.cvDuplicate.Enabled = false;

Если вы установите следующее свойство как false. Проверка не произойдет, даже если вы настроите ее из базы данных на стороне сервера. Так что будьте осторожны при настройке. Если вы не установите эти свойства в.ASCX и попытаетесь настроить их из базы данных на стороне сервера (код C#), то они будут работать. this.cvDuplicate.Enabled = true;

ValidateEmptyText = "False"
FieldRequired = "False"

'Check if fields have been filled out
If String.IsNullOrEmpty(txtCoursePrefix.Text.Trim()) _
        OrElse String.IsNullOrEmpty(txtCourseNum.Text.Trim()) Then
    cvDuplicate.ErrorMessage = "Required"
    args.IsValid = False
End If
Другие вопросы по тегам