【发布时间】:2010-11-17 14:01:14
【问题描述】:
我很想知道你们认为就 ASP.NET MVC 中的 UpdateModel 方法而言应该被视为“正确行为”。
我在这里问的原因是,如果这个功能是“设计的”,有人可以澄清为什么它是这样的,也许是一种不同的调用方式来实现所需的功能,我想这会是90% 的人希望它以何种方式工作?
本质上,我的抱怨在于UpdateModel 中绑定过程的行为。
假设您希望通过简单的Save 操作方法更新表单,表单上的数据字段反映了数据库中的模型,最初为了保存请求,我们可能会从数据库中获取现有模型,然后将已更改、通过FormCollection 发送并随后通过UpdateModel 更新的相关字段更新到我们现有的模型。此功能,但似乎此 DB 填充对象上的任何现有属性正在“重置”;我的意思是,被设置为 null 或初始化默认值,就好像它是一个全新的对象一样,除了那些与FormCollection 中的对象匹配的对象。
这是一个问题,因为存在于对象上但不一定存在于表单上的任何现有属性,例如任何子集合或对象、日期或任何非面向 UI 的字段都是空的,给您留下了一半-已填充的、或多或少不可用的对象,由于所有丢失的数据(包括可能现在设置为 0 的 ID 堆栈)而无法保存到数据库。
我认为这是不可取的行为,UpdateModel 应该只更新在FormCollection 中找到属性匹配的属性。这意味着您现有的所有属性都不会受到影响,但您的更新将被设置。然而,从目前的推论来看,显然情况并非如此——它似乎实例化了一个对象的全新副本,更新表单的属性,然后返回新对象。 p>
最后,从这个负担的角度来看,保存半复杂表单并保留所有现有对象数据的唯一方法是手动合并每个 属性与相应的表单属性,以绝对保证仅更新表单中存在的属性。
我猜,
- 那些同意这是有意为之的人,我的形式结合是最好的方式吗?
- 或者,您是如何解决这个问题的?
请随时发表您对这些人的看法,谢谢。
这是另一个遭受此问题的人的例子:
Calling UpdateModel with a collection of complex data types reset all non-bound values?
【问题讨论】:
-
我很想看看其他人的想法,因为我碰巧同意你的观点。必须有一种正确、更优雅的方式来处理这个问题。
-
感谢您对 svanharen 的支持,这是一个很难描述的问题,当您没有真正听到任何声音时,您会想知道您是否是世界上唯一遇到此问题的人 ;)跨度>
标签: asp.net-mvc updatemodel formcollection