2011-10-06 15 views
6

Ecco il caso d'uso:Convalida discreta MVC3: come rimuovere/riattaccare la convalida da un gruppo di elementi?

Ho questo modulo lungo con un gruppo di campi che diventa visibile solo se l'utente effettua una determinata selezione in uno degli input visibili. Leggendo il post di Brad Wilson sull'argomento ho pensato jQuery.validator.unobtrusive.parse ('. Extra-data') dove .extra-data è una classe di un div nascosto. Nessuna fortuna dato che i dati erano già lì quando è stato fatto il primo parsing.

Così alla fine sono arrivato fino a questo per rimuovere le regole:

$('.data-panel').find('input[type="text"], textarea, select').each(function (i, item) { 
    var currentRules = $(item).rules('remove'); // Saving removed rules to a sorta dictionary 
    if (!$.isEmptyObject(currentRules)) { 
     removedRules[$(item).attr("name")] = currentRules; 
    } 
}); 

e questo a loro riattaccare:

$('.data-panel').find('input[type="text"], textarea, select').each(function (i, item) { 
    if (!$.isEmptyObject(removedRules[$(item).attr('name')])) { 
     $(item).rules('add', removedRules[$(item).attr('name')]); 
    } 
}); 

Il problema è, ci si sente un po hacky come ho' Sto letteralmente attraversando ogni campo rimuovendo e riattaccando quelle regole di validazione. La mia domanda è: non c'è un modo più semplice? Anche le prestazioni sono un problema, in una di queste enormi forme è possibile percepire il ritardo tra il clic e la corsa di convalida.

+0

http://stackoverflow.com/questions/5104288/adding-validation-with-mvc-3-jquery-validator-in-execution-time –

risposta

23

Non rimuovere e riattaccare le regole. Solo gli input disable o enable. I campi disabilitati non partecipano alla convalida, né vengono inviati al server.

//disable inputs. No validation will occur on these 
$('.data-panel').find('input[type="text"], textarea, select').attr('disabled', 'disabled'); 

//enable inputs. Validation is re-enabled 
$('.data-panel').find('input[type="text"], textarea, select').removeAttr('disabled'); 
+0

ho sicuramente piaci soluzione molto più del mio, l'uomo grazie . – JoseMarmolejos

Problemi correlati