Meilleures pratiques pour le débogage de la liaison ASP.NET MVC

Pouvez-vous me donner des conseils généraux sur la façon de déboguer ASP.NET MVC Binding?

Lorsque tout fonctionne comme prévu, ASP.NET MVC est génial. Mais si quelque chose ne fonctionne pas, comme si quelque chose ne se liait pas pour une raison inconnue, j’ai du mal à identifier le problème et à passer des heures à rechercher un problème apparemment simple.

Imaginons que vous arriviez dans une méthode de contrôleur comme celle-ci:

[HttpPost] public ActionResult ShipmentDetails(Order order) { //do stuff } 

Imaginons en outre que la classe Order ressemble à ceci:

 public class Order { public decimal Total {get; set;} public Customer Customer {get; set;} } public class Customer { public ssortingng Name {get; set;} public ssortingng Phone {get; set;} } 

Quels sont les bons endroits à démarrer lorsque la méthode Order in the controller n’est pas liée correctement? Quels sont les bons endroits pour commencer lorsque seules des parties de la Order sont liées correctement?

Comme Darin l’a suggéré, commencez par inspecter ce qui est envoyé du client au serveur en utilisant quelque chose comme Firebug, Fiddler ou un autre outil proxy de débogage Web.

Sinon, vous souhaiterez peut-être parcourir le code source pour voir ce qui se passe pendant la liaison.

Deux façons que je peux recommander de le faire sont

  1. Incluez le projet de code source System.Web.Mvc dans votre application et référencez-le . C’est bon pour l’apprentissage, mais probablement pas recommandé pour une application commerciale.

  2. Téléchargez les symboles de System.Web.Mvc à partir des serveurs Microsoft Symbol, modifiez vos parameters pour pouvoir déboguer le code source de la structure et définissez un point d’arrêt approprié .

Bien que la réponse de @russ soit utile et parfois nécessaire, les deux options semblent un peu faibles lorsque la question principale concerne davantage la situation dans son ensemble. Je recommande donc Glimpse .

De sa page environ:

… Glimpse vous permet de déboguer votre site Web ou votre service Web directement dans le navigateur. Glimpse vous permet de “visualiser” ce qui se passe sur votre serveur Web. En d’autres termes, ce que Firebug doit faire pour déboguer le code côté client, Glimpse consiste à déboguer votre serveur dans le client.

Et comme vous avez spécifiquement posé des questions sur la liaison de données, vous souhaiterez consulter la documentation de l’onglet Liaison . Vous pourrez voir, encore une fois à partir des docs:

  1. Ordinal : Ordre dans lequel l’infrastructure de liaison de modèle MVC a tenté de lier les données disponibles
  2. Reliure modèle : Reliure modèle utilisée dans un scénario donné
  3. Propriété / Paramètre : Nom de la chose que le classeur essayait de lier
  4. Type : Type de la chose que le classeur essayait de lier
  5. Fournisseurs de valeur essayés : Fournisseurs que le classeur a tenté d’utiliser pour obtenir une valeur donnée (et si elle a réussi)
  6. Valeur tentée : Valeur réelle avec laquelle le fournisseur doit travailler (conversation de type post, etc.)
  7. Culture : culture utilisée pour parsingr la valeur brute Valeur brute: valeur brute avec laquelle le fournisseur doit travailler (conversation de type avant, etc.)

Voir le démarrage rapide Brièvement:

  1. Installez le paquet glimpse.mvc3
  2. Accédez à http://yourhost/yourapp/Glimpse.axd et activez-le.
  3. Cliquez sur l’icône aperçu en bas à droite de n’importe quelle vue de votre application pour plus de détails.

Un bon endroit pour commencer est de télécharger et d’installer FireBug et de voir ce qui est publié par le client sur le serveur. Vous verrez alors les éléments manquants, incorrects,… Les articles de blog tels que Model Binding vers une liste sont également de bonnes lectures pour vous familiariser avec la syntaxe correcte utilisée par le modèle par défaut.

Dans mon cas, regarder la propriété ModelState dans la méthode du contrôleur a fourni les réponses pour lesquelles la liaison de modèle échouait.

entrer la description de l'image ici