11
votes

Modèles MVC non mis à jour avec succès mais ne peut pas trouver la raison

Cela me conduit fou.

Je continue à obtenir l'exception suivante

système.invalidoperationException: le modèle de type 'modèles.expense' n'a pas été mis à jour avec succès. à System.Web.MVC.Controller.UPDATemodel [Tmodel] (modèle TModel, préfixe de chaîne, chaîne [] InclureProperties, chaîne [] exclutPlusterties, IMITIONNIAnAcence`2 ValueProvider) au système.web.mvc.controller.updatemodel [Tmodel] (modèle Tmodel) ATMVC.CONTROLLERS.BASEEXPENSECONTROLLER.EDIT (ID String, Collection FormCollection) Dans C: \ Projects \ Frais.MVC \ Contrôleurs \ BaseExpensecontroller.cs: Ligne 109

Mais je ne peux pas tracer pourquoi il ne met pas à jour, rien à l'exception ne suggère pourquoi il n'a pas mis à jour.

Tous les pointeurs?


1 commentaires

Pouvez-vous publier le code, il est difficile de suivre sans elle.


6 Réponses :


12
votes

examiner le contrôleur.modelstate et rechercher des entrées avec des erreurs> 0.


0 commentaires

15
votes

attraper l'exception ou appelez plutôt TryPDaTemodel. TryPDaTemodel ne jettera pas une exception si elle ne peut pas mettre à jour votre modèle, cela reviendra simplement faux. Vous trouverez les détails d'erreur dans la modélisation comme suggéré par Craig. En fait, UpdateTemodel appelle simplement TryupDaTemodel et les lancers si elle renvoie false.


2 commentaires

Ce n'est pas si intelligent d'ignorer l'erreur. Il vous chassera tout le temps jusqu'à ce que cela vous procure :)


Pour le point de Milan, il est "meilleur" de gérer de faux. Quelque chose comme si (! Tryupdateemodel (modèle)) Vue de retour ("Modifier", modèle). En supposant que vous ayez une validation câblée dans l'interface utilisateur, cela montrera les erreurs.



2
votes

Il est difficile de dire sans aucun doute sans voir de code, mais à chaque fois que j'ai vu une exception de ce type, 99% du temps qu'il a été associé à la base de données. Pour ne pas dire que la cause première n'est pas quelque part dans le code, mais il est tout à fait possible que vous manquiez quelque chose et essayant de transmettre des données non valides à la base de données. D'autres problèmes à rechercher seraient toute relation de relation qui doit avoir lieu.


0 commentaires

0
votes

Je vérifie généralement 3 choses.

  1. faire chacun des membres des modèles avoir des getters et des setters
  2. suis-je en train de remplir les exigences de le modèle. IE: est tout requis Données présentes et correctes?
  3. Est-ce que je violais une relation quelque part? Dois-je avoir des valeurs par défaut sur des objets imbriqués?

    si cela échoue toujours, je revenons à; xxx

    qui fonctionne habituellement.


0 commentaires

0
votes

sur la signalisation Web générée, vérifiez si vous avez un champ masqué, éventuellement identifiant d'une sorte qui ne peut pas être mis à jour.


0 commentaires

1
votes

J'ai eu le même problème et que le problème était parce que j'utilise une interface IDALIDATILABLEOBJECT dans le modèle qui était en relation avec une mise à jour. Le problème réel était dans la base de données, puisque le rendement de validation que j'ai des entrées dupliquées pour une colonne unique :)

la chose est. Vous devez utiliser UpdateTemodel ou TryPDaTemodel, les deux méthodes mises à jour ModelState.isvalid. Maintenant, il peut parfois être difficile de trouver ce qui provoque une erreur. Regardez le débogueur pour modelstate.errorkeys et vérifiez s'il existe une entrée qui ne devrait pas être là :)

acclamations


0 commentaires