2011-10-24 9 views
23

Sto utilizzando le visualizzazioni standard del rasoio MVC3 con la convalida JavaScript discreta, utilizzando @Html.ValidationSummary per visualizzarle nella parte superiore del modulo. Se passano le convalide standard (cose come [Required]), eseguo una convalida lato client molto personalizzata che si attiva quando l'utente preme il pulsante Invia. (La convalida guarda attraverso un certo numero di elementi del modulo per assicurarsi che sia stato controllato il set corretto di essi, ecc., Quindi non è così semplice come creare un nuovo validatore personalizzato per un singolo campo).Aggiungi messaggio di errore a @ Html.ValidationSummary

Mi piacerebbe l'eventuale errore (s) che costruisco lì per essere mostrato nella lista ValidationSummary, ma non riesco a capire come ottenere il messaggio di errore per apparire lì.

+1

Nel lato client o server-side? –

risposta

37

Nel lato client:

function YourCustomValidator() { 
    // do your validation logic here via JavaScript 
    return true; // or false based on your validation logic 
} 
$(document).ready(function() { 
    // take your own form-selector like ("form", this) 
    $("form", this).first().submit(function() { 
     return (YourCustomValidator() && $(this).valid()); 
    }); 
}); 

O Nel lato server:

Pensi di avere un modello come questo:

public class Test { 
    [Required] 
    [StringLength(100)] 
    public string FullName { get; set; } 
} 

e quando si stanno convalidando it:

if(ModelState.IsValid) { // default validations run here 
    if(/* some custom validations run here, there is an error about "FullName" */){ 
     // you should set the "key" for Model-Error to "FullName" 
     ModelState.AddModelError("FullName","error-message goes here") 
    } 
    if(/* some custom validations run here, the error is global, not on "FullName" */){ 
     // you should set the "key" for Model-Error to an empty-string 
     ModelState.AddModelError("","error-message goes here") 
    } 
    // also you can test for model-errors again like this: 
    if(ModelState.IsValid) { // if you add any error above, this will be "false" 

    } 
} 
+3

Grazie - Sto cercando solo il lato client in questo caso. La mia domanda è se trovo un errore in "YourCustomValidator", come faccio ad apparire il mio messaggio di errore specifico? Ho già una convalida sul lato server, che mi permette di impostare qualsiasi messaggio di errore che voglio tramite "AddModelError", ma voglio fare l'equivalente in Javascript. – Kras

+0

È possibile creare una logica personalizzata per mostrare un messaggio di errore tramite JS e/o è possibile creare una classe di attributo di convalida personalizzata tramite C#. a quale ti riferisci? –

+3

ben descritto:] +1 – Shahin

4

È possibile farlo semplicemente aggiungendo Error Message a ModelState per visualizzare il messaggio di errore per l'utente, purché si disponga della visualizzazione ValidationSummary().

Per aggiungere l'errore al ModelState basta fare questo:

ModelState.AddModelError("ColumnNameOrErrorMessageKeyInState","error message goes here") 
Problemi correlati