我正在使用Telerik的MVC Grid使用Razor视图编辑MVC3中的一些记录。
我使用以下代码调用控制器上的编辑:
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以允许网格返回显示模式?
答案 0 :(得分:3)
如果没有看到你的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" });