2011-05-06 72 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

相關問題