2011-05-06 76 views
0

我MVC2应用程序是给了我今天悲痛......我想编辑的数据库记录,使用下面的控制器代码:MVC2抛出的UpdateModel()InvalidOperationException异常,试图更新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); 
     } 
    } 

我“M获得高层次的异常‘类型的模型‘Model.Entity’无法更新’,当我深入到ModelState中我看到试图更新Id字段时,它的失败 - “设置id属性仅在实体反序列化期间支持.NET 3.5+“。

的问题是,我怎么能告诉的UpdateModel()不更新Id字段?我不希望它更新该字段!

任何想法? 戴夫

回答

0

尝试

UpdateModel(tester, formValues.ToValueProvider()); 

,并确保Id不包含在formValues。

+0

谢谢!那正是我想要的... – DaveN59 2011-05-06 20:10:30

0

使用TryUpdateModel(tester) insted的的UpdateModel(tester)

+0

不只是失败没有例外?我可能对尝试..()方法做的错误理解,但我认为他们只是以更好的方式失败。它仍然没有解决根本问题... – DaveN59 2011-05-06 20:07:47

+0

尝试..()只是不抛出InvalidOperation异常。所以,我可能在这里是错的。 @巴拉的答案可能会有所帮助。 – Priyank 2011-05-06 20:09:54

相关问题