2009-08-26 6 views
1

J'essaie de mettre à jour certaines propriétés d'objet en appelant UpdateModel(myObject, new[] { "stringprop1", "stringprop2", "intprop"}).ASP.NET MVC UpdateModel défaillant de manière inattendue

Ceci échoue pour une raison inconnue. Plusieurs propriétés de chaîne sont mises à jour avec succès. Lorsque j'essaie de mettre à jour une propriété int, elle échoue. La nouvelle valeur int est envoyée à partir d'une liste de sélection html sur la vue.

Je peux voir les données de la vue dans mon ValueProvider. La clé correspond au nom de la propriété de l'objet et la valeur est ce que j'attends de la vue (sauf que c'est une chaîne.) Je pensais que UpdateModel pouvait gérer les conversions de type simples

Lorsque j'appelle UpdateModel une exception InvalidOperationException est levée, SEULEMENT SI valeur de la propriété change.

en outre, l'objet est un Linq sql objet généré.

EDIT

Recherche par modèle d'état après avoir appelé TryUpdateModel, je vois cette exception sur la propriété que je ne parviens pas à avec:

- Exception {"Operation is not valid due to the current state of the object."} System.Exception {System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException}

La valeur que j'essaie de mettre à jour est une clé étrangère. Pourquoi ne puis-je pas mettre à jour cette valeur? Merci pour toute aide?

EDIT 2

Je trouve ceci: http://social.msdn.microsoft.com/Forums/en-US/linqtosql/thread/f9c4a01a-195a-4f2b-a1cb-e2fa06e28b25

J'aurais juré que je l'ai changé la clé au lieu de la propriété de l'association avant, mais peu importe. Que peut-on faire dans cette situation de reliure de modèles MVC?

Répondre

3

Le visser. Je viens de le faire à l'ancienne:

myObject.Skunk = db.Skunks.Single(s => s.ID == intprop); 
2

J'ai rencontré le même problème et j'ai réalisé que c'était le DataContext lui-même. Je gardais ceci en session, plutôt que de créer un nouveau avec chaque demande. Une fois que j'ai créé le contexte pour chaque demande, cette erreur est partie.

+0

J'ai eu le même problème que vous décrivez et il a été résolu en instanciant juste un nouveau DataContext - je ne peux pas expliquer pourquoi cependant. Des idées? –

0

J'ai rencontré ce problème lorsque j'utilisais DataLoadOptions. Le simple fait d'avoir défini DLO pour la colonne avec la clé étrangère était suffisant pour provoquer cette erreur. Je l'ai corrigé en créant une nouvelle instance de DataContext sans DLO.

Notez que cela ne fait aucune différence que la valeur dans la colonne avec clé étrangère a été définie sur null au début de la mise à jour.

J'espère que cela aide quelqu'un qui a un problème similaire (cette question a été l'un des premiers résultats que j'ai rencontrés lorsque j'essayais de le résoudre moi-même).

Questions connexes