2009-01-28 6 views
4

L'utilisation de .net MVC et je fais de la validation côté serveur dans mon action qui gère le poste.validation côté serveur, comment passer des erreurs à afficher dans MVC?

Quelle est une bonne technique pour renvoyer les erreurs à la vue?

Je pense à la création d'une collection d'erreur, puis en ajoutant cette collection à mon ViewData puis en quelque sorte tisser javascript (en utilisant jQuery) pour afficher l'erreur.

Ce serait bien qu'il jQuery avait une certaine façon automagique d'afficher une erreur puisque c'est un modèle commun.

Que faites-vous?

Répondre

8

Vous souhaitez ajouter les erreurs au ModelState comme indiqué par @Mehrdad.

... 
catch (ArgumentOutOfRangeException e) 
{ 
    ModelState.AddModelError(e.ParamName, e.Message); 

    result = View("New"); 
} 

et comprennent les ValidationSummary dans votre vue

<%= Html.ValidationSummary() %> 
+0

Pour développer cela, il ajoute également une classe de validation d'erreurs aux entrées créées à l'aide HtmlHelpers, et vous pouvez afficher des messages uniques sur le terrain partout dans votre vue à l'aide HtmlHelpers qui utilisent le même ModelState. Un framework est en cours de développement pour l'unification de la validation serveur/client: google xval. – anonymous

1

ViewData.ModelState est conçu pour transmettre des informations d'état (erreurs) du contrôleur à la vue.

-1

Oui il est bon chemin, mais de toute façon vous pouvez mettre un message d'erreur à votre propre ViewData [ « touche »] = « Erreur à la page ... bla ... bla ... bla ... »

<% if (!string.IsNullOrEmpty(ViewData["key"]+"")) { %> 

<div> 
Yor customized error template 
</div 

<% } %> 
+0

Cela fait de la validation dans la vue, ce qui va à l'encontre de MVC. –

0

Pas tout à fait sûr que ce soit ce que vous cherchez, mais il est très facile à utiliser le plugin de validation de formulaire pour jquery à http://bassistance.de/jquery-plugins/jquery-plugin-validation/. Il affiche automagiquement les messages d'erreur en rouge.

Bien sûr, vous devez toujours effectuer une validation côté serveur et renvoyer les erreurs. tvanfosson vous a montré comment dans sa réponse.

0

J'utilise l'objet ModelState builtin tenir mes erreurs de validation. La validation se fait soit dans la liaison ou à la main appuyée en ajoutant manuellement les erreurs comme ceci:

ModelState.AddModelError("LastName","Last name can't be Doe").

Pour soutenir le scénario post formulaire ajax, j'ai fait une méthode d'extension du ModelStateDictionary, GetErrors(), qui retourne un objet ModelStateErrorsDTO lumière (une version aplaties des erreurs de validation de l'ModelState appropriés pour la sérialisation JSON).

Lorsqu'un poste de formulaire est une demande ajax je retourne alors un JSON sérialisé ModelStateErrorsDTO.

Du côté jquery, j'ai écrit une fonction d'aide qui place les erreurs de validation à côté des champs d'entrée pertinents en utilisant les classes mvc css par défaut, c'est-à-dire input-validation-error.

De cette façon, vous serez capable de créer des ajaxforms discrets avec des messages de validation.

Espérons que cela aide.

+0

Avez-vous un exemple? – Funky81

+0

J'aimerais voir un exemple aussi. J'ai essayé de comprendre cela pendant un moment et je n'ai jamais pensé faire passer ModelStateErrors comme un objet JSON – woopstash

Questions connexes