TryUpdateModel - 无法更新类型的模型

时间:2011-05-22 15:36:34

标签: asp.net-mvc asp.net-mvc-3 telerik-grid telerik-mvc

我正在使用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以允许网格返回显示模式?

1 个答案:

答案 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" });