web-dev-qa-db-fra.com

Ajouter un message d'erreur à @ Html.ValidationSummary

J'utilise des vues MVC3 Razor standard avec une validation Javascript discrète, en utilisant @Html.ValidationSummary pour les afficher en haut du formulaire. Si les validations standard (des choses comme [Required]) réussi, j'exécute ensuite une validation côté client très personnalisée qui se déclenche lorsque l'utilisateur clique sur le bouton Soumettre. (La validation passe en revue un certain nombre d'éléments de formulaire pour s'assurer que le bon ensemble d'entre eux a été vérifié, etc., donc ce n'est pas aussi simple que de simplement créer un nouveau validateur personnalisé pour un seul champ).

J'aimerais que les erreurs possibles que j'y construise soient affichées dans la liste ValidationSummary, mais je ne sais pas comment faire apparaître le message d'erreur.

26
Kras

Côté 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());
    });
});

OU côté serveur:

Pensez que vous avez un modèle comme celui-ci:

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

et quand vous le validez:

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"

    }
}
42
javad amiry

Vous pouvez le faire simplement en ajoutant le Error Message Au ModelState devrait afficher le message d'erreur pour vous, à condition que ValidationSummary() soit appelé dans votre vue.

Pour ajouter l'erreur à ModelState, procédez comme suit:

ModelState.AddModelError("ColumnNameOrErrorMessageKeyInState","error message goes here")
5
Has AlTaiar