如何在控制器上更改/发送属性

本文关键字:属性 控制器 | 更新日期: 2023-09-27 18:17:18

Using

ASP.NET MVC 4

实体框架 5(代码优先方法(

我有常规的控制器和视图。这里的区别在于,我需要获取实际发送到控制器的属性的名称。这是我所拥有的:

public ActionResult Update(ClassX data)
{
    //do something with data
}

问题是当我使用IDbSet.Attach(entity)时,它不知道更改了哪些属性,它只是加载从视图发送的属性,它不会加载数据库数据并"更新"刚刚来自视图的内容。

由于这种情况正在发生,我想检查视图发送到控制器的属性,但没有运气。如果我能够做到这一点,我可以更改我的更新方法来加载数据库数据,然后使用新数据进行更新。

有人对任何问题有任何建议吗?

  1. 检查已发送的属性
  2. 解决使用IDbSet.Attach(entity)时无法加载的其他属性的任何方法

谢谢。

如何在控制器上更改/发送属性

[HttpPost]
public ActionResult Update(int id)
{
    // Load the entity to be updated from the database
    ClassX data = db.ClassXs.SingleOrDefault(x => x.Id == id);
    // Modify only the properties that were present in the request 
    // (BE EXTREMELY CAREFUL WITH THAT -> YOUR CODE IS VULNERABLE TO MASS ASSIGNMENT
    // AND THE PROPER SOLUTION IS TO USE A VIEW MODEL WHICH WILL ONLY CONTAIN THE PROPERTIES
    // THAT ARE ALLOWED TO BE UPDATED FROM THE VIEW)
    this.UpdateModel(data);
    // at this stage the data instance will have its properties coming from the view
    // updated with fresh values => now you can commit it to the database
    ...
}