Il validatore personalizzato non si attiva
-
22-07-2019 - |
Domanda
Ho il seguente codice. Quando premo il mio pulsante di salvataggio, tre campi di convalida richiesti funzionano correttamente e funzionano correttamente. Tuttavia il mio validatore personalizzato non funziona. Non attiva affatto l'evento. Ho caselle di testo standard e un controllo riassuntivo delle convalide. C'è qualche motivo per cui potrebbe non funzionare?
<asp:RequiredFieldValidator runat="server" ControlToValidate="txtForename" Display="None" ErrorMessage="Must enter a valid first name." />
<asp:RequiredFieldValidator runat="server" ControlToValidate="txtSurname" Display="None" ErrorMessage="Must enter a valid last name." />
<asp:RequiredFieldValidator runat="server" ControlToValidate="txtEmail" Display="None" ErrorMessage="Must enter a valid e-mail address." />
<asp:CustomValidator runat="server" OnServerValidate="CheckAtLeastOnePhoneNumber"
ErrorMessage="Must enter at least one phone number." Display="None"
ValidateEmptyText="True" />
<script runat="server">
void CheckAtLeastOnePhoneNumber(Object s, ServerValidateEventArgs e)
{
if (txtMobileNumber.Text.Equals("") &&
txtWorkNumber.Text.Equals("") &&
txtHomeNumber.Text.Equals(""))
{
e.IsValid = false;
}
}
</script>
Soluzione
L'ho risolto.
Il controllo del validatore personalizzato è un controllo sul lato server, quindi gli altri validatori (che sono lato client) vengono eseguiti per primi. Questo è un po 'fuorviante poiché il controllo validationsummary di solito mostra tutti gli errori del validatore.
Supponendo che il nome, l'e-mail, ecc. fossero validi, solo allora si sarebbe inviato al server e avrebbe generato l'errore di convalida.
Altri suggerimenti
Esatto. Funziona così. Se si desidera che un validatore personalizzato funzioni anche nel browser, è necessario implementare la convalida personalizzata in JavaScript e definire il metodo nella proprietà ClientValidationFunction del controllo. Quindi verrà visualizzato con gli errori sul lato client nel riepilogo della convalida.