2012-11-20 19 views
8

Nella vista Razor (ASP.NET MVC 4), ho due pulsanti di opzione per mostrare/nascondere alcuni campi. Quando viene selezionato il primo pulsante radio, questi campi sono invisibili; quando viene selezionato il secondo pulsante radio, i campi diventano visibili. Questo è fatto da una funzione Javascript che è legata all'evento onclick dei pulsanti radio.Disabilitare la convalida per determinati campi

function displayHiddenFields(value) { 
    if (value == 'true') 
    $('#myDiv').removeClass('hidden'); 
else 
    $('#myDiv').addClass('hidden'); 
} 

Sto utilizzando le annotazioni di dati sul modello di visualizzazione per eseguire la convalida. Il mio problema è che i campi invisibili sono anche convalidati. Questi campi devono essere convalidati solo quando sono visibili. Ho provato a manipolare l'attributo data-val sugli elementi di input, ma questo non funziona.

$('input1').attr('data-val', value); 

Come posso risolvere il mio problema? C'è un modo per disabilitare la convalida per i campi che sono invisibili usando Javascript sul lato client? Altrimenti, devo fare un postback per rendere i campi in modo condizionale.

+0

È necessario rimuovere questi campi quando radiobutton è in un punto e nell'altro è necessario utilizzare AJAX per aggiungerli di nuovo alla forma. – Mariusz

+1

Possibile duplicato di http://stackoverflow.com/questions/6913220/jquery-validator-and-fields-that-have-been-hidden – Suhas

risposta

1

Suggerisco di utilizzare la convalida di jQuery. Puoi convalidare il tuo modello in modo condizionale:

if($("#field").is(":checked")){ 
//Add some validation here 
}else{ 
//Default validation here 
} 
if($("form").valid()){ 
//Do processing 
} 

Il problema sarà sul back-end. se stai usando annotazioni di dati, suppongo che tu stia convalidando il modello anche nel controller; qualcosa come "Model.isValid()" o qualcosa di simile? Finché entrambi i casi (pulsante radio1 clic o pulsante2 cliccato) corrispondono sempre a ciò che un modello "valido" dovrebbe essere, starai bene. In caso contrario, potrebbe essere necessario disattivare alcune annotazioni di dati. Proprio dalla mia esperienza. jQuery Validation Docs

6

ho risolto aggiungendo il seguente pezzo di codice JavaScript al fondo della mia pagina:

<script type="text/javascript"> 
    $(function() { 
     var settings = $.data($('form').get(0), 'validator').settings; 
     settings.ignore = ".hidden"; 
    }); 
</script> 

In questo modo, tutti gli ingressi che hanno la classe di .hidden applicata ad esso verranno ignorati nel client Convalida

2
<button id="Submit" type="submit">Submit</button> 
<script type="text/javascript"> 
    $("#Submit").on("click", function() { 
     var validator = $("form").data('validator'); 
     validator.settings.ignore = "input[type=hidden]"; 
    }); 
</script> 
0

Per default (almeno nelle versioni successive del convalida discreto) il campo ignorare è impostato su ": nascosto" (valutati da jQuery), che è il modo migliore di un semplice controllo di una class = "nascosto" o type = "hidden".

Problemi correlati