2011-05-06 2 views
0

Mon application MVC2 me donne la douleur aujourd'hui ... Je veux modifier un enregistrement de base de données, en utilisant le code contrôleur suivant:MVC2 jette InvalidOperationException dans UpdateModel(), en essayant de mettre à jour le champ id

[AcceptVerbs(HttpVerbs.Post), Authorize(Roles = "Admin")] 
    public virtual ActionResult Edit(int id, FormCollection formValues) 
    { 
     var masterDataProxy = MasterDataChannelFactory.OpenChannel(); 
     var tester = masterDataProxy.GetTester(id); 
     masterDataProxy.CloseChannel(); 

     if (null == tester) 
     { 
      return View(Views.NotFound); 
     } 

     try 
     { 
      UpdateModel(tester); 

      var adminProxy = AdminChannelFactory.OpenChannel(); 
      adminProxy.AddUpdateTester(tester); 
      adminProxy.CloseChannel(); 

      return RedirectToAction(Actions.Index()); 
     } 
     catch (Exception ex) 
     { 
      ModelState.AddModelError("Tester", ex.Message); 

      return View(tester); 
     } 
    } 

I obtiens l'exception de haut niveau "Le modèle de type" Model.Entity "n'a pas pu être mis à jour", et quand je descends dans ModelState je vois qu'il échoue en essayant de mettre à jour le champ Id - "Définition de la propriété Id est seulement supporté avec .NET 3.5+ pendant la désérialisation d'entité ".

La question est, comment puis-je dire à UpdateModel() de ne pas mettre à jour le champ Id? Je ne veux pas qu'il mette à jour ce champ !!

Des idées? Dave

Répondre

0

Essayez

UpdateModel(tester, formValues.ToValueProvider()); 

et assurez-vous Id ne sont pas inclus dans les formValues.

+0

Merci! C'était exactement ce que je cherchais ... – DaveN59

0

Utilisez TryUpdateModel(tester) insted de UpdateModel(tester)

+0

Est-ce que cela ne manque pas sans exception? Je peux avoir une mauvaise compréhension de ce que les méthodes Try ..() font, mais je pensais qu'ils échouent simplement d'une manière plus agréable. Il ne résout toujours pas le problème sous-jacent ... – DaveN59

+0

Essayez ..() ne lance pas l'exception InvalidOperation. Donc, je peux me tromper ici. La réponse de @ Bala peut aider. – Priyank

Questions connexes