2012-12-19 9 views
5

Mam CustomValidator i zdefiniowany każdy możliwy parametr to:wiadomość CustomValidator robi pokazać się

<asp:CustomValidator ID="custom" runat="server" Text="*" ErrorMessage="This email address is already registered" ControlToValidate="txtEmail" OnServerValidate="isExist" Display="None" ValidationGroup="valRegister"></asp:CustomValidator> 

PS: Mam RequiredFieldValidator na samym polu tekstowym, a nie chcę, by sprawdzić pustą wartość.

Oto inne obiekty w postaci:

<div class="row"><asp:Label runat="server" Text="Email" AssociatedControlID="txtEmail"></asp:Label><asp:RequiredFieldValidator runat="server" ErrorMessage="Please enter your email" Text="*" ControlToValidate="txtEmail"></asp:RequiredFieldValidator><asp:TextBox ID="txtEmail" runat="server" CssClass="inpBox"></asp:TextBox></div> 

<asp:Button runat="server" Text="Register" CssClass="btn" OnClick="register_member" CausesValidation="true" ValidationGroup="valRegister" /> 

<asp:ValidationSummary ID="validationSummary" runat="server" ShowMessageBox="true" ShowSummary="false" ValidationGroup="valRegister" /> 

protected void isExist(object sender, ServerValidateEventArgs args){ 
if (cre.member.isExist(args.Value)){ 
    args.IsValid = false; 
} else { 
    args.IsValid = true; 
} 

}

Kiedy kładę e-mail już istnieje w tabeli db * pojawia się na formularzu, ale błąd wiadomość nie wyświetla się. Wypróbowałem wszystkie opcje wyświetlania niestandardowego błędu, ale bez powodzenia.

Odpowiedz

4

Wziąłem kod dokładnie tak, jak w pytaniu.

Zmiana Display="None" na Display="Dynamic" w asp:CustomValidator powoduje pojawienie się gwiazdki.

Zmiana ShowSummary="false" na ShowSummary="true" w asp:ValidationSummary powoduje pojawienie się komunikatu o błędzie w podsumowaniu.

+0

Uświadomiłem sobie coś z twoją odpowiedzią, OnServerValidate działa tylko wtedy, gdy ValidationSummary> ShowSummary jest "true". ShowMessageBox działa po stronie klienta i z tego powodu nie działa OnServerValidate. Rozwiązałem mój problem, dodając wywołanie ajax do strony aspx, aby sprawdzić wprowadzony adres e-mail, a następnie użyłem ClientValidationFunction, aby wywołać tę funkcję js. – dvdmn

+0

Aha! Niestety, nie zdawałem sobie sprawy, że był to błąd sprawdzania poprawności wiadomości, o który prosiłeś. Tak, jeśli chcesz, aby wiadomość po stronie klienta, ale wymaga zaangażowania serwera (np. Aby sprawdzić adres e-mail w bazie danych), musisz zrobić coś takiego. – Carson63000

1

Zmiana Display do "Dynamic" ani niczego tak naprawdę nie robić nic, jeśli serwer nie jest obsługa walidacji ręcznie, zwłaszcza przy użyciu <asp:CustomValidator. Nawet ValidationGroup z lub bez ValidationSummary nic nie robi.

Zawsze wymuszaj walidację na serwerze przed, umożliwiając użytkownikowi wyjście z formularza/gridview/etc.

tj

  ...your form here... 
      <tr> 
       <td colspan="3" style="text-align: center" valign="top"> 
        <asp:Button ID="ButtonSubmit" runat="server" Text="Submit" OnClick="Submit_Click" CausesValidation="true" /> 
        <asp:Button ID="ButtonCancel" runat="server" Text="Cancel" OnClick="Cancel_Click" CausesValidation="false" /> 
       </td> 
      </tr> 
     </table> 
    </asp:Panel> 

... 
    protected void Submit_Click(object sender, EventArgs e) 
    { 
     Page.Validate(); 
     if (Page.IsValid) 
     { 
      //processing done after a successful submit here! 
     } 
    } 

Page.Validate() zmusi walidacji kontroluje sprawdzić i wyświetlić komunikat o błędzie.

Powiązane problemy