Элемент управления CustomValidator не работает в.Net

У меня есть довольно большая форма ASPX с большим количеством текстовых полей и раскрывающихся списков для заполнения. Большинство текстовых полей имеют элементы управления RequiredFieldValidator, и они прекрасно работают.

Тем не менее, у меня есть 3 текстовых поля для номеров домашних, мобильных и рабочих телефонов. Каждое текстовое поле является необязательным, но если оно заполнено, значение должно быть числовым. На данном этапе мне не нужно проверять формат номера телефона, только убедитесь, что он числовой.

Код на стороне клиента для одного из полей выглядит так:

<asp:Label ID="lblWorkPhone" runat="server" AssociatedControlID="txtWorkPhone" Text="<%$ Resources: Registration, WorkPhone %>" /><br />
<asp:TextBox ID="txtWorkPhone" runat="server" />
<asp:CustomValidator ID="validateWorkPhone" runat="server" 
                            ValidationGroup="reg" ControlToValidate="txtWorkPhone" ForeColor="Red" 
                            ErrorMessage="<%$ Resources: Registration, HomePhoneNumber %>" 
                            Text="<%$ Resources: Registration, RequireMessage %>" 
                            onservervalidate="validateWorkPhone_ServerValidate" />

Метод проверки на стороне сервера находится здесь:

protected void validateWorkPhone_ServerValidate(object source, ServerValidateEventArgs args)
{
    long temp = 0;

    long.TryParse(txtWorkPhone.Text, out temp);

    if (temp == 0)
    {
        args.IsValid = false;
        validateWorkPhone.IsValid = true;
    }
    else
    {
        args.IsValid = true;
        validateWorkPhone.IsValid = false;
    }
}

Насколько я могу судить, метод проверки на стороне сервера вообще не запускается. Все остальные элементы проверки на странице работают нормально.

Кто-нибудь может помочь?

3 ответа

Решение

Являются ли валидаторы на стороне клиента (такие как RequiredFieldValidators) действительными? Валидаторы на стороне сервера запускаются только тогда, когда все клиентские валидаторы действительны.

РЕДАКТИРОВАТЬ
Большинство валидаторов, таких как RequiredFieldValidator или RegularExpressionValidator, выполняют валидацию как на стороне клиента, так и на стороне сервера. При сбое проверки на стороне клиента отправка отменяется, поэтому проверка только на стороне сервера не запускается.

Для CustomValidator вам придется явно добавить проверку на стороне клиента, если вы этого хотите.

Хорошо, если вам нужно только подтвердить, что они числовые, почему бы не использовать вместо этого RegexValidator? Это спасло бы вас от поездки на сервер.

MSDN статья выше, со списком распространенных регулярных выражений, в том числе числовой.

Этот пост давно ушел, но у меня просто была похожая проблема, и я сузил ее до ошибки.NET. Мой пользовательский валидатор находился внутри панели, в которой я программно устанавливал видимость на false при загрузке страницы, а позже в моем коде устанавливал значение true. Для меня это не должно иметь значения, но когда я устанавливаю значение панели по умолчанию на false в файле.aspx, следовательно, никогда не устанавливаю видимость в коде на false, это работает нормально.

Как ни странно, у меня есть кнопка отмены, которая устанавливает видимость на false без дальнейших проблем.

Другие вопросы по тегам