использование пользовательских валидаторов в ASP.net - PullRequest
1 голос
/ 11 января 2012

Я использую специальный валидатор ASP.net для проверки, существует ли почта в базе данных или нет, поэтому у меня есть функция bool на стороне сервера

public void isUnique(object source, ServerValidateEventArgs args)
{
    args.IsValid = Formatters.FormatUser.AlternateMailUnique(_txtAlternateEmail.Text);    
}

и пользовательский валидатор, который проверяет текстовое поле _txtAlternateEmail

<asp:TextBox ID="_txtAlternateEmail" runat="server" onkeypress="typetext();" onmouseout="textclear();"></asp:TextBox>
                        <asp:CustomValidator runat="server" id="cusCustom" controltovalidate="_txtAlternateEmail"  OnServerValidate="isUnique"  errormessage="Mail already exists" ValidationGroup="savechanges"/>

Между тем валидаторы не действуют как валидаторы .net, я имею в виду, что если функция isUnique возвращает false, страница возвращается на сервер и ничего не проверяется.

Ответы [ 2 ]

1 голос
/ 11 января 2012

Вам необходимо использовать свойство Page.IsValid - это свойство указывает, что проверка страницы прошла успешно или нет.

Помимо обработчика isUnique(), вам необходимо проверить значение Page.IsValid в обработчике нажатия кнопки или другом дескрипторе, в котором вы хотите выполнить действие.

Например,

protected void Button1_Click(object sender, EventArgs e)
  {
    if (Page.IsValid)
    {
      //your actions
     }
  }

PS: удалить атрибут JavaScript onmouseout="textclear()", если он очищает содержимое _txtAlternateEmail.

0 голосов
/ 11 января 2012

Похоже, вы не включили проверку сервера в вашу разметку.Попробуйте добавить:

OnServerValidate="isUnique"
...