无论如何都要从特定请求的表单数据中禁用MVC“重新填充”吗?
我正在开发一个编辑“购物车”的MVC示例,其中包含一个简单的项目列表及其数量。到目前为止,这是典型的。
我正在使用编辑器模板,以便我可以在项目列表上使用EditorFor
,MVC将生成Items[x]
字段前缀,并在帖子后面为我提供基本上免费的模型绑定。 / p>
部分示例是删除帖子之间数量为零的项目。不幸的是,由于HTML帮助器方法优先考虑模型值的表单值,这导致项目的数量被减少,但是上一个项目的表单数据被发布在那个位置。该行的非发布数据显然仍然正确。
NB。我意识到人们通常会在这里使用PRG模式,但由于这是一个样本,因此没有持久层(我依赖于表单数据+静态产品存储库实现)。
编辑:要明确我不是在反对PRG模式,示例只是突出显示模型绑定器和服务器端验证。
答案 0 :(得分:1)
好的,这似乎是我遇到的问题:Strange behaviour in ASP.NET MVC: removing item from a list in a nested structure always removes the last item
我找到的解决方案是清除ModelState,然后填充你需要的东西。
PRG也是可能的,你必须暂时将模型和模型状态存储在会话和GET中,从会话中检索并删除。这正是ASP NET MVC Contrib 2 ActionFilter PassParametersDuringRedirect
中正在做的事情。