如何在控制器上更改/发送属性
本文关键字:属性 控制器 | 更新日期: 2023-09-27 18:17:18
Using
ASP.NET MVC 4
实体框架 5(代码优先方法(
我有常规的控制器和视图。这里的区别在于,我需要获取实际发送到控制器的属性的名称。这是我所拥有的:
public ActionResult Update(ClassX data)
{
//do something with data
}
问题是当我使用IDbSet.Attach(entity)
时,它不知道更改了哪些属性,它只是加载从视图发送的属性,它不会加载数据库数据并"更新"刚刚来自视图的内容。
由于这种情况正在发生,我想检查视图发送到控制器的属性,但没有运气。如果我能够做到这一点,我可以更改我的更新方法来加载数据库数据,然后使用新数据进行更新。
有人对任何问题有任何建议吗?
- 检查已发送的属性
- 解决使用
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
...
}