2012-01-18 11 views
9

Quando un modulo è pubblicato in mio controller, faccio la seguente controllo:Come sapere se ModelState contiene errori

if(ModelState.IsValid) 

Se il modello non è valido, gli errori vengono aggiunti alla ModelState. Il modello viene quindi passato alla vista con il riepilogo della convalida.

Tuttavia, voglio verificare se il ModelState ha errori dall'interno del gestore jQuery ready, in modo da poter aggiungere qualche comportamento aggiuntivo se il modulo contiene errori. È possibile?

risposta

26

Si potrebbe sputare javascript variabile globale:

<script type="text/javascript"> 
    var isValid = @Html.Raw(Json.Encode(ViewData.ModelState.IsValid)); 
</script> 

e poi:

$(function() { 
    if (!isValid) { 
     alert('opa'); 
    } 
}); 
+1

l'usereste? – gdoron

+1

@gdoron, che dipenderebbe dal contesto specifico e dal problema esatto che sto cercando di risolvere. Dato che l'OP non ha fornito alcun contesto, perché ha bisogno di sapere se il modello è valido nel documento. Gestore già attivo Non posso rispondere alla tua domanda se lo utilizzerei perché non ho abbastanza informazioni. Quindi come sempre la risposta è: dipende. –

+0

ho voluto ottenere l'idea tnx @DarinDimitrov che ha aiutato molto lo –

2

un po 'oltre a @Dimitrov risposta:

<script type="text/javascript"> 
    var isValid = '@Html.Raw(Json.Encode(ViewData.ModelState.IsValid))'; 

    if (isValid != 'true') 
     // model has some errors... 
</script> 

E' importante utilizzare singoli qoutes intorno l'aiutante Altrimenti, quel punto e virgola ; causa problemi. No, puoi scriverlo, e non puoi, in tutti i casi, causare un errore di sintassi. A meno che tu non metta quelle virgolette sull'aiuto come ho detto.

0

Oltre a Darins Risposta:

In .cshtml:

@Html.Hidden("IsValid", Json.Encode(ViewData.ModelState.IsValid)) 

in JS

var isValid = $('#IsValid').val().toLowerCase() == "true"; 
Problemi correlati