2009-08-26 4 views
1

Я пытаюсь обновить некоторые свойства объекта, вызвав UpdateModel(myObject, new[] { "stringprop1", "stringprop2", "intprop"}).Ошибка ASP.NET MVC UpdateModel неожиданно

Это не работает по неизвестной причине. Несколько свойств строки успешно обновляются. Когда я пытаюсь обновить свойство int, он терпит неудачу. Новое значение int отправляется из списка выбора html в представлении.

Я могу видеть данные с точки зрения в моем ValueProvider. Ключ соответствует имени свойства объекта, и значение является тем, что я ожидаю от представления (за исключением того, что это строка. Я думал, что UpdateModel может обрабатывать простые преобразования типов.

Когда я вызываю UpdateModel, возникает исключение InvalidOperationException, ТОЛЬКО ЕСЛИ СТОИМОСТЬ иМУЩЕСТВА МЕНЯЕТСЯ.

Кроме того, объект является Linq To Sql созданного объекта.

EDIT

Просматривая модель государства после вызова TryUpdateModel, я вижу, это исключение на имуществе, которое у меня возникло проблемы с:

- 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 - я не могу объяснить, почему. Есть идеи? –

0

Я столкнулся с этой проблемой, когда использовал DataLoadOptions. Простое наличие DLO для столбца с внешним ключом было достаточно, чтобы вызвать эту ошибку. Я исправил это, создав новый экземпляр DataContext без DLO.

Обратите внимание, что не имеет значения, что значение в столбце с внешним ключом было установлено равным null в начале обновления.

Я надеюсь, что это поможет кому-то, у кого есть аналогичная проблема (этот вопрос был одним из первых результатов, с которыми я столкнулся, когда сам пытался его решить).

Смежные вопросы