asp.net-mvc – ASP.NET MVC中UpdateModel的正确行为是什么?
我有兴趣知道你们觉得应该被认为是ASP.NET MVC中UpdateModel方法的“正确行为”。
我在这里问的原因可能是,如果这个功能是“通过设计”,有人可以澄清为什么它是这样的,也可能是一种方式,以不同的方式实现所需的功能,我想象将是90百分之百的民众希望这个工作? 实质上,我的想法在于UpdateModel中绑定进程的行为。 假设您希望通过简单的保存操作方法更新表单,表单上的数据字段将反映数据库中的模型,最初要保存请求,我们可能会从DB获取现有模型,然后更新相关的已更改的字段通过FormCollection发送,然后由UpdateModel更新为现有模型。这个功能,但是这个DB填充对象的任何现有属性似乎都是“reset”;我的意思是,被设置为null或初始化默认,就好像它是一个全新的对象,除了显然那些与FormCollection匹配的对象。 这是一个问题,因为对象上存在的但不一定存在于表单上的任何现有属性(如任何子集合或对象,日期或任何非UI面向字段)都为空,从而使您拥有一个半填充,更多或更少的不可用的对象,由于所有丢失的数据,包括可能的一堆ID现在设置为0,无法保存到DB。 我相信这是不理想的行为,UpdateModel应该只更新在它在FormCollection中找到属性匹配的属性。这将意味着您现有的所有属性将保持不变,但您的更新将被设置。然而,从迄今为止推断出来的情况显然不是这样 – 它似乎实例化了一个全新的对象副本从表单中更新属性,然后返回新对象。 最后,为了说明这是多少负担,唯一的方法是保存半复杂形式并保留所有现有的对象数据是手动结束每个属性与相应的表单属性绝对仅保证表单中存在的属性正在更新。 我猜, >那些同意这是设计的人,我的方式是结婚最好的方式吗? 谢谢你,请随便提供你的想法。 这是另一个遇到这个问题的人的例子: 解决方法
您使用UpdateModel()的行为听起来像是列表绑定,在这种情况下UpdateModel()将吹灭列表的内容并重新填充它。请参阅
Hanselman’s blog进行讨论。如果要更新单个对象,UpdateModel()将更新该单个对象,从而保留不具有相应表单值的属性。
许多这些问题归结为UpdateModel()真的意在重新填充基于表单输入的视图模型 – 而不是域模型。 (我稍微简化一下,说一个视图模型只是一个控制器和视图之间的契约,而你的域模型可能是一个LINQ2SQL或EF模型对象)。所有的MVC教程和演示都显示UpdateModel()用于对数据库对象,我觉得是不幸的,因为对于模型绑定的预期目的有点误导。罗伯特的帖子更多地表明UpdateModel()的实际意图。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – ASP.NET MVC 4 – 301重定向RouteConfig.cs
- asp.net – ASP调试 – 点击断点然后中止当前请求的执行
- asp.net中符合SCORM的LMS
- asp.net-mvc-3 – KnockoutJs Observable Arrays和Dropdown
- asp.net-mvc – 加载程序集时会发生什么?
- asp.net – 在.NET中发生部分回发时,用户控件中的Javascrip
- dropdownlist事件不显示在属性窗口asp.net Visual Studio 2
- asp.net-web-api – WebApi DelegatingHandler未调用prefli
- asp.net-mvc – ASP.Net MVC和jQuery表单插件上传文件
- asp.net-mvc – VIEWDATA和VIEWBAG存储在MVC中的哪个位置?
- asp.net – 操纵HTTP响应
- asp.net-mvc – ASP.NET MVC 4动作过滤器问题
- kendo-ui – Kendo UI MVC将MultiSelect数据值发
- asp.net-mvc – MVC项目中的System.Globalizatio
- asp.net-mvc – MVC 4 – 更优雅的方式编辑项目的
- asp.net – nhibernate死锁
- asp.net-mvc – 如何在Visual Studio 2017中构建
- 如何将asp.net文本框滚动到底部
- ASP.NET Core 2.0 + EF6 + Linux&nbs
- 一步一步创建ASP.NET MVC5程序[Repository+Autof