【发布时间】:2011-02-18 03:28:47
【问题描述】:
是否有针对特定请求禁用 MVC 从表单数据“重新填充”?
我正在开发一个 MVC 示例,用于编辑“购物车”,其中包含一个简单的商品列表及其数量。到目前为止,很典型。
我正在使用编辑器模板,这样我就可以在项目列表上使用EditorFor,而MVC 将生成Items[x] 字段前缀,并在回帖中为我提供基本免费的模型绑定。
部分示例是删除帖子之间数量为零的项目。不幸的是,由于 HTML 辅助方法优先于模型值的表单值,这导致项目的 number 减少,但之前发布的项目的 form data那个位置。该行的未发布数据显然仍然正确。
注意。我意识到这里通常会使用 PRG 模式,但由于这是一个示例,因此没有持久层(我依赖于表单数据 + 静态产品存储库实现)。
编辑:要明确的是,我并不是在反对 PRG 模式,该示例只是突出显示模型绑定器和服务器端验证。
【问题讨论】:
-
PRG 模式不仅仅关乎持久性——它关乎尊重网络的工作方式。在没有实现 PRG 模式的情况下,如果用户使用“返回”按钮返回表单,所有数据都将重新发布。请记住,回发反模式完全被破坏了。
-
@Richard 在 ASP.NET MVC 中没有“回发”。
-
@George - HTTP 中有一个 POST 方法。我很清楚 ASP.NET MVC 在 Page 上没有 PostBack 属性,可能是因为它没有 Page 类。
-
@rsenna - 我知道为什么应该使用 PRG 模式。该示例用于内部培训,作为向已经普遍精通的多平台开发人员教授 ASP.NET MVC 细节的一种方式。
-
@Richard POST != 回发。在你想要另一个的地方使用一个是灾难的秘诀。