2012-08-05 16 views
5

Ho una forma che ha un'opzione per inserire le dimensioni di:MVC 3 discreto validazione - condizionatamente disabilitare/abilitare la convalida

  • Larghezza & Altezza
  • Larghezza
  • Altezza

E Ho due div contenitore che nascondo/mostro a seconda di quale delle tre opzioni è selezionata:

<div class="editor-field" id="width-container"> 
    @Html.EditorFor(model => model.Width) 
    @Html.ValidationMessageFor(model => model.Width) 
</div> 

<div class="editor-field" id="height-container"> 
    @Html.EditorFor(model => model.Height) 
    @Html.ValidationMessageFor(model => model.Height) 
</div> 

Se l'altezza è selezionata, la larghezza non viene visualizzata nel modulo, come posso disabilitare la convalida discreta sul campo di input Larghezza in un modo che mi consentirà di re-installarlo facilmente se l'utente cambia idea, ad es. la rimozione degli attributi data- * non è un'opzione. Sono felice di creare una classe CustomAttribute per gestire questo, ma non voglio dover hackerare i file jquery standard per fare in modo che questo funzioni in quanto rende l'aggiornamento alle nuove versioni un mal di testa lungo la pista. Se tutto il resto fallisce, userò il solito trucco di aggiungere un valore 0 ai campi quando non sono visibili e quindi rimuoverlo quando vengono visualizzati.

EDIT:

Si prega di essere consapevole del fatto che quando larghezza non è visibile, non è un campo "nascosto" di per sé è solo un tag input che non è visibile all'utente perché il div genitore ha uno stile di visualizzazione: nessuno

risposta

12

è possibile impostare il validatore jQuery che è l'elaborazione della convalida discreto di ignorare elementi nascosti:

jQuery.validator.defaults.ignore = ":hidden"; 

// the line above is outside any $(document).ready(...) or similar 
$(document).ready(function(){ 
    ... 
}); 
... 
+0

Ho visto varie versioni di questo, ma nessuno di loro sembra funzionare - Sono giunto alla conclusione che il problema è che questa regola non funziona perché non è il tag di input che è nascosto è il div principale - o questa regola è progettata per lavorare su tag "nascosti" e tag di input "invisibili". BTW Ho provato la tua soluzione e non funziona. – Rob

+0

': hidden' è sicuramente vero per gli elementi che sono nascosti perché i loro genitori sono nascosti. Come puoi vedere in questo caso, la mia soluzione funziona bene in un caso base: http://jsfiddle.net/7PmEz/5/. Quindi proviamo a trovare dove il delta è quello che hai, ci deve essere qualcos'altro mancante. Si prega di inserire l'html che viene generato in un jsfiddle, quindi provare a utilizzare lo stesso javascript che uso per testarlo. Se funziona, si prega di postare l'intero codice di visualizzazione in modo da poter dare un'occhiata. – Milimetric

+0

Hmmm frustrante, non riesco a inserire il codice in jsfiddle perché è generato utilizzando il framework MS MVC3, quindi non si sta verificando un confronto valido ... – Rob

1

Così sembra che questa sia la risposta alla mia domanda (sono andato a caccia di nuovo su Google difficile da cercare per cose che non lo facevano in relazione ai campi "nascosti"):

https://stackoverflow.com/a/7673985/491950

esempio

Grazie per le vostre risposte.

+0

Quindi come si digita l'input? – stuartdotnet

+0

è disabilitato solo se non viene mostrato all'utente - vedi il link SO sopra la mia risposta – Rob

Problemi correlati