1

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

4

1 回答 1

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" });
于 2011-07-13T06:28:53.790 回答