2009-09-04 10 views
0

J'ai vue avec une forme, lorsque l'utilisateur soumet le formulaire, la méthode d'action assortie est comme:Impossible de mettre à jour l'objet dans une action de contrôle avec ASP.NET MVC?

public ActionResult Test(ViewModel vm, Member member) 
{ 
//... 
if (ModelState.IsValid) 
    { 
    try{ 
     //... 
     member.OID = 1; //error here 
     //... 
    }Catch(Exception ex) 
    { 
     //... 
    } 
    }    
} 

Il fonctionne très bien avant, mais maintenant je reçois l'erreur comme ci-dessous lors de l'attribution de la valeur à une propriété d'objet : Le fonctionnement n'est pas valide en raison de l'état actuel de l'objet

pourquoi? comment le résoudre?

Répondre

0

Ce n'est pas très clair en tant qu'échantillon de code, si mes estimations sont exactes. L'objet membre est la classe LINQ dans laquelle vous avez un OID en tant que FK pour un autre objet de votre schéma.

L'erreur indique que vous ne pouvez pas attribuer d'OID directement. Dites que votre O est l'ID de la profession. alors vous devez

member.Occupation = (from c in dc.Occupation where c.ID = 1 select c); 

Espérons que cela aide.

+0

Merci. Tu as raison. L'OID est un FK. Mais si j'affecte member.Occupation = myOccupation; (myOccupation est un objet existant qui correspond à une ligne existante dans db pour la table Occupation), et l'enregistre (SubmitChanges), cela me donnera une autre erreur disant que je ne peux pas ajouter de clé dupliquée. Cela signifie qu'il essaie d'insérer une autre ligne avec le même ID pour Occupation. Assez confus. – KentZhou

+1

Votre objet myOccupation doit être chargé à partir du même dataContext que l'objet membre chargé. voir - http://stackoverflow.com/questions/795196/linq-problem-with-inserting-new-rows-that-have-references-to-existing-records/795430#795430 – Jirapong

Questions connexes