8
votes

ASP.NET MVC 2 - "Le modèle de type" XYZ "n'a pas pu être mis à jour" lors de l'utilisation de UpdateModel et de Linq vers des entités (.NET 3.5)

J'ai un modèle configuré à l'aide de LINQ vers des entités et avons un code de travail qui ajoute à la base de données comme prévu. Cependant, je ne peux pas obtenir d'UpdateModel pour travailler lorsque j'utilise .NET 3.5.

System.InvalidOperationException was caught
  Message=The model of type 'Site.Models.XYZ' could not be updated.
  Source=System.Web.Mvc
  StackTrace:
       at System.Web.Mvc.Controller.UpdateModel[TModel](TModel model, String prefix, String[] includeProperties, String[] excludeProperties, IValueProvider valueProvider)
       at System.Web.Mvc.Controller.UpdateModel[TModel](TModel model, String prefix)
       at Site.Controllers.XYZController.Edit(Site.Models.XYZ xyz) in D:***.cs:line 81
  InnerException: 


0 commentaires

4 Réponses :


2
votes

Ce que je fais dans mes projets MVC est saisir le code source pour le défautModelbinder de CodePlex et collez-la Dans une nouvelle classe dans votre projet, comme MyDefaultModelBinder. Ensuite, enregistrez ce liant modèle dans votre global.aSax: xxx

ceci vous permet de définir un point d'arrêt dans la méthode BindModel, et vous pouvez déterminer pourquoi il n'est pas capable de se lier. < / p>


2 commentaires

Cela n'a pas fonctionné, quelques erreurs lors de la compilation. "'' System.web.mvc.dictionaryHelPers'S 'est inaccessible en raison de son niveau de protection" et "" system.web.mvc.ivalueprovider "ne contient pas de définition pour" trygetvalue "et aucune méthode d'extension" trygetvalue "acceptant un premier argument de type 'system.web.mvc.ivalueprovider' pourrait être trouvé "


Oui, maintenant que vous le mentionnez, je pense que je devais inclure d'autres classes, comme Typehelperers et Typedescriptorhelper. Tout ce dont vous avez besoin devrait être dans le projet CODEPLEX, cependant.



13
votes

réussi à résoudre le problème. Peut être fait de deux manières: xxx pré>

ou p>

db.ApplyPropertyChanges(original.EntityKey.EntitySetName, xyz)


2 commentaires

Je viens d'avoir le même problème et que vous utilisez TryUpdate, vous pouvez identifier les biens (s) des biens (s) qui n'a pas été défini pour aider à identifier le problème.


Le liant modèle jette une exception lorsqu'il ne parvient pas à mettre à jour une propriété sur le modèle. Si vous attendez des exceptions, comme dans les cas de mauvaises données, utilisez TryupDaTemodel comme celui-ci ne jette pas une exception.



0
votes

Utiliser tryupdaTemodel () au lieu de updateModel () fonction pour résoudre ce

Les deux updateModel () et tryupdateemodel () La fonction permet de mettre à jour le modèle avec les valeurs de formulaire et effectuer des validations.

différence entre updateemodel () & tryupdateemodel ()

updateemodel () jette une exception si la validation échoue, où tryupdateemodel () ne jettera jamais un Exception, il retourne vrai ou faux


0 commentaires

0
votes

Vous pouvez faire comme cette méthode (cela fonctionne pour moi) Vide interne protégé UpdateModel (modèle TModel, chaîne [] IncluseProperties) Où Tmodel: classe;

exemple; string [] InclureProperty = {xyz.id.tostring (), xyz.name}; UpdateModel (Uye, includeproperty);


0 commentaires