TryUpdateModel - модель типа не может быть обновлена - PullRequest
1 голос
/ 22 мая 2011

Я использую Telerik MVC Grid для редактирования некоторых записей в MVC3, используя Razor view.

Я вызываю правку на контроллере, используя следующий код:

public ActionResult _CategoriesUpdate(int id)
    {
        WR_TakeAway_Menu_Categories category = db.WR_TakeAway_Menu_Categories.Where(c => c.ID == id).Single();
         TryUpdateModel(category);            
        db.ApplyCurrentValues(category.EntityKey.EntitySetName, category);

        db.ObjectStateManager.ChangeObjectState(category, EntityState.Modified);
        db.SaveChanges();

Хотя это обновляет записи в serer, оно сохраняет сетку в режиме редактирования, потому что не удалось обновить все свойства «категории».

Если я изменяю TryUpdateModel на UpdateModel, он выдает ошибку, говорящую, что «модель типа WR_TakeAway_Menu_Categories не может быть обновлена»

Есть ли лучший способ сделать это или какой-нибудь способ разрешить TryUpdateModel возвращать true, чтобы позволить сетке вернуться в режим отображения?

1 Ответ

3 голосов
/ 13 июля 2011

Не видя ваш класс WR_TakeAway_Menu_Categories, я собираюсь предположить, что у вас есть некоторые другие классы в качестве свойств вашего класса WR_TakeAway_Menu_Categories.

Если это так, вам нужно исключить пользовательские объекты из метода TryUpdateModel и установить их вручную, прежде чем это сделать.

Например:

db.Entry(category).Reference(c => c.CreatedByUser).CurrentValue = CreatedByUser;
db.Entry(category).Reference(c => c.LastUpdateByUser).CurrentValue = LastUpdateByUser;

Это установит ваши переменные "пользовательский объект" на последнее значение.Я заметил, что в некоторых случаях, если вы делаете это не так, а просто устанавливаете свойство явно, запись базы данных не всегда будет обновляться.

После того, как вы вручную обновите пользовательские свойства, затем вызовитеTryUpdateModel, исключая свойства, которые вы устанавливаете вручную.

TryUpdateModel<WR_TakeAway_Menu_Categories>(category, null, null, new[] { "CreatedByUser", "LastUpdateByUser" });
...