我很想知道你们觉得就UpdateModel
ASP.NET MVC 中的方法而言应该被视为“正确的行为”。
我在这里问的原因可能是,如果这个功能是“设计的”,有人可以澄清为什么它是这样的,也许是一种不同的调用方式来实现所需的功能,我想这就是 90 的方式% 的人希望这能奏效吗?
本质上,我的抱怨在于UpdateModel
.
假设您希望通过简单的Save
操作方法更新表单,表单上的数据字段反映了数据库中的模型,最初为了保存请求,我们可能会从数据库中获取现有模型,然后更新相关字段哪些已更改,通过发送FormCollection
然后更新UpdateModel
到我们现有的模型。此功能,但似乎此 DB 填充对象上的任何现有属性正在“重置”;我的意思是,被设置为 null 或初始化默认值,就像它是一个全新的对象一样,除了那些与FormCollection
.
这是一个问题,因为对象上存在但不一定存在于表单上的任何现有属性,例如任何子集合或对象、日期或任何非面向 UI 的字段都是空的,给您留下一半填充、更多或由于所有丢失的数据(包括可能现在设置为 0 的 ID 堆栈)而无法保存到数据库的不可用对象。
我认为这是不可取的行为,UpdateModel
应该只更新在FormCollection
. 这意味着您现有的所有属性都将保持不变,但您的更新将被设置。然而,从目前的推论来看,显然情况并非如此——它似乎实例化了一个全新的对象副本,更新表单的属性,然后返回新对象。
最后,从这个负担的角度来看,保存半复杂表单并保留所有现有对象数据的唯一方法是手动将每个属性与相应的表单属性结合到绝对保证仅更新表单中存在的属性。
我猜,
- 那些同意这是设计使然的人,我的形式结合是最好的方式吗?
- 或者,你是如何解决这个问题的?
请随时提供您对这些人的想法,谢谢。
这是另一个遭受此问题困扰的人的例子:
Calling UpdateModel with a collection of complex data types reset all non-bound values?