5

C'è un modo per agganciare la convalida remota discreta MVC3 sul client, prima che i dati vengano inviati al metodo remoto e dopo che un risultato è stato restituito dal metodo remoto?Ganci eventi per MVC non invadente convalida remota

Sto tentando di comunicare a un validatore remoto di eseguire la convalida solo se si fa clic sul pulsante di invio. Il comportamento normale è quello di convalidare più volte, ad esempio durante la pressione di un tasto, la sfocatura, ecc. Questo non va bene, poiché il metodo di validazione in questione deve chiamare un'operazione non idempotente. Devo assicurarmi che il metodo venga invocato solo se l'utente ha fatto clic sul pulsante di invio.

Se potessi collegarmi a un evento precedente, potrei impostare un campo nel modulo che contrassegna il pulsante di invio come cliccato o meno. Tuttavia, dovrei reimpostare questo flag dopo che il metodo remoto ha restituito un risultato di convalida.

Altri suggerimenti? Si tratta di convalidare una password utilizzando il metodo Membership.ValidateUser(string username, string password) del provider di appartenenze di ASP.NET. Questo metodo incrementerà il FailedPasswordAttemtCount ogni volta una password non valida viene inviato, in modo da non voglio che per eseguire durante la sfocatura, pressione di un tasto, ecc

risposta

7

Si potrebbe ignorare le opzioni di convalida predefinite per la pagina corrente:

$.validator.setDefaults({ 
    onkeyup: false, 
    onfocusout: false, 
    onsubmit: true 
}); 
+0

L'impostazione predefinita non ha effetto sugli altri moduli? Oppure l'impostazione dei valori di default è limitata alla pagina attualmente caricata? – danludwig

+0

Solo l'ambito della pagina attualmente caricata. –

+0

Questa è davvero la soluzione migliore, grazie. Solo per soddisfare la mia curiosità, è la risposta alla mia domanda "Non ce ne sono" o "Non è facile"? – danludwig

0

La soluzione di cui sopra non ha risolto questo per me. In qualche modo, l'impostazione del validatore non veniva impostata. Quindi, ho implementato quanto segue e ha funzionato:

$(function() { 
    var settings = $.data($('form')[0], 'validator').settings; 
    settings.onkeyup = false; 
}); 
Problemi correlati