Question

J'ai joué avec le framework ASP.NET MVC et la seule chose qui me déroute vraiment est la façon dont je suis censé effectuer la validation côté serveur des données de formulaire publiées.Je suppose que je ne publie pas sur la même URL, mais si ce n'est pas le cas, comment réafficher le formulaire avec les données saisies et les messages d'erreur ?De plus, où doit aller la logique de validation ?Dans le modèle ou le contrôleur ?Cela semble être l'un des rares domaines où les formulaires Web sont beaucoup plus puissants (les contrôles de validation me manquent).

Était-ce utile?

La solution

Vous voudrez peut-être jeter un œil au dernier message de ScottGu pour ASP.Net prev 5.Il passe en revue un exemple de validation très intéressant :

http://weblogs.asp.net/scottgu/archive/2008/09/02/asp-net-mvc-preview-5-and-form-posting-scenarios.aspx

Autres conseils

Voici un aperçu du flux dans MVC :

  1. /new - affiche votre vue "Nouveau" contenant un formulaire que l'utilisateur doit remplir
    • L'utilisateur remplit le formulaire et il est publié dans /create
    • La publication est acheminée vers l'action Créer sur votre contrôleur
    • Dans votre méthode d'action, mettez à jour le modèle avec les données publiées.
    • Votre modèle doit se valider.
    • Votre contrôleur doit indiquer si le modèle est valide.
    • Si le modèle est valide, enregistrez-le dans votre base de données.Redirigez vers /show pour afficher la vue show de votre objet.
    • Si le modèle n'est pas valide, enregistrez les valeurs du formulaire et les messages d'erreur dans TempData, puis redirigez à nouveau vers l'action Nouveau.Remplissez les champs de votre formulaire avec les données de TempData et affichez le(s) message(s) d'erreur.

Les cadres de validation vous aideront dans ce processus.De plus, je pense que l'équipe ASP.NET MVC prévoit un cadre de validation pour la prochaine version préliminaire.

Pour autant que je sache, tout le monde essaie encore de trouver la manière « standard » de procéder.Cela dit, consultez les derniers articles de Phil Haack et Scott Guthrie sur MVC et vous trouverez des informations intéressantes sur la façon dont ils ont fait.Quand je jouais avec moi-même, j'ai créé un ModelBinder pour la classe de données LinqToSql que j'avais générée.Vous pouvez consulter cet article pour découvrir comment créer un ModelBinder de base :

Classeur de modèles ASP.Net MVC

Dans votre action, si vous aviez créé un ModelBinder "Produit", vous déclareriez simplement l'action comme ceci :

public ActionResult Nouveau (Produit produit)

Et le classeur de modèles se chargera d'attribuer les données publiées aux propriétés des objets tant que vous les avez correctement construits de toute façon.

Après cela, dans votre méthode GetValue(), vous pouvez implémenter la validation de votre choix, que ce soit en utilisant des exceptions, des expressions régulières ou tout ce que vous pouvez appeler comme :

(ModelStateDictionary_name).AddModelError("form_element_id", "ented_value", "error_message");

Ensuite, vous pouvez simplement lancer un <%= Html.ValidationSummary() %> dans votre vue pour afficher toutes vos erreurs.

Pour la validation côté client, je viens d'utiliser jQuery.Après avoir configuré un exemple de base, vous pouvez commencer à faire des choses intéressantes en combinant tout cela avec des vues partielles et des appels Ajax.

Avez-vous jeté un œil à cela ?http://www.codeplex.com/MvcValidatorToolkit

Cité de la page

La boîte à outils Validator fournit un ensemble de validateurs pour le nouveau framework ASP.NET MVC pour valider les formulaires HTML sur le client et le serveur à l'aide des ensembles de validation.

J'ai peur que quelqu'un de plus connaisseur en MVC que moi doive parler de l'endroit où vous devriez placer les choses dans l'architecture.

J'apprends également le framework MVC, donc je ne sais pas à quel point cela se passe, mais d'après ce que j'ai compris, vous auriez un formulaire sur une vue telle que Edit.aspx.Ce formulaire serait ensuite publié sur le contrôleur vers une autre méthode d'action telle que Update() en transmettant le contenu du formulaire que vous avez défini dans Edit.aspx en tant que paramètres.

Update(int id, string name, string foo)

Vous pouvez effectuer la validation dans le cadre de cette méthode.Si tout va bien,

return View("Item", yourObject)

Il y a Château.Components.Validator module dans le projet Castle.C'est très agile et puissant.Il génère des règles de validation basées sur les attributs du modèle (ou toute autre source) et est même capable de générer une validation JS à l'aide de jQuery, Prototype Validation, fValidate et autres.Bien sûr, il est sage d’abstraire le validateur derrière l’interface IValidationEngine.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top