TryUpdateModel - 无法更新类型的模型

发布于 2024-11-08 15:35:20 字数 720 浏览 3 评论 0原文

我正在使用 Telerik 的 MVC 网格通过 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();

虽然这更新了服务器中的记录,但它使网格保持在编辑模式,因为它无法更新“类别”的所有属性。

如果我将 TryUpdateModel 更改为 UpdateModel,它会抛出一个错误,提示“无法更新 WR_TakeAway_Menu_Categories 类型的模型”

是否有更好的方法来执行此操作,或者某种方法允许 TryUpdateModel 返回 true 以允许网格返回显示模式?

I'm using Telerik's MVC Grid to edit some records in MVC3, using Razor view.

I call the edit on the controller using the following code:

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();

Although this updates the records in the serer, it keeps the grid in edit mode because it was unable to update all the properties of the "category".

If I change TryUpdateModel to UpdateModel it throws an error saying "the model of type WR_TakeAway_Menu_Categories could not be updated"

Is there a better way of doing this, or some way to allow TryUpdateModel to return true to allow the grid to return to display mode?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

寻找一个思念的角度 2024-11-15 15:35:20

如果没有看到 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" });

Without seeing your WR_TakeAway_Menu_Categories class, I'm going to assume that you have some other classes as properties of your WR_TakeAway_Menu_Categories class.

If that is the case, you'll need to exclude the custom objects from the TryUpdateModel method and set those manually before hand.

For example:

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

This will set your "custom object" variables to the latest value. I have noticed that in some cases if you do not do it this way, and instead just set the property explicitly, the database record will not always get updated.

After you have manually updated the custom properties, then call the TryUpdateModel, excluding the properties that you set manually.

TryUpdateModel<WR_TakeAway_Menu_Categories>(category, null, null, new[] { "CreatedByUser", "LastUpdateByUser" });
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文