2009-08-26 106 views
1

我試圖通過調用UpdateModel(myObject, new[] { "stringprop1", "stringprop2", "intprop"})來更新一些對象屬性。ASP.NET MVC UpdateModel意外失敗

這是失敗的原因不明。多個字符串屬性正在成功更新。當我嘗試更新一個int屬性時失敗。新的int值從視圖上的html選擇列表發送。

我可以在我的ValueProvider中查看來自視圖的數據。該鍵與對象的屬性名稱匹配,值是我期望從視圖(除了它是一個字符串,我認爲UpdateModel可以處理簡單的類型轉換)

當我調用UpdateModel時,拋出InvalidOperationException,屬性的值是調用TryUpdateModel後更改。

而且,對象是的LINQ to SQL生成的對象。

編輯

通過模型狀態看,我看到,我有麻煩的財產此異常與:

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

我試圖更新的值是一個外鍵。爲什麼我無法更新此值?謝謝你的幫助?

EDIT 2

我發現這一點: http://social.msdn.microsoft.com/Forums/en-US/linqtosql/thread/f9c4a01a-195a-4f2b-a1cb-e2fa06e28b25

我可以發誓,我已經改變了密鑰而不是之前的關聯屬性,但不管。在這個MVC模型綁定情況下可以做些什麼?

回答

3

擰緊它。我只是做了老式的方式:

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

我有這個相同的問題,然後意識到它是DataContext本身。我在會話中保存了這些內容,而不是在每個請求中創建一個新的。一旦我爲每個請求創建了上下文,這個錯誤就消失了。

+0

我遇到了與您描述的相同的問題,並且通過實例化新的DataContext解決了這個問題 - 但我無法解釋爲什麼。有任何想法嗎? – 2010-09-23 19:15:38

0

我在使用DataLoadOptions時遇到了這個問題。只需將DLO設置爲具有外鍵的列就足以導致此錯誤。我通過在沒有DLO的情況下創建DataContext的新實例來修復它。

請注意,在更新開始時,將外鍵列中的值設置爲null沒有什麼區別。

我希望這可以幫助有類似問題的人(這個問題是我自己試圖解決時遇到的第一個結果)。