【发布时间】:2011-07-29 02:57:13
【问题描述】:
我有一个用于编辑页面操作的宁静 URL。这在控制器上实现为一个 Edit 方法,它接受 GET 请求和一个 Edit 方法,它接受 POST 请求。
这意味着您可以访问编辑 URL,它将显示一个用于 GET 的表单或保存一个用于 POST 的表单。
[HttpGet]
public ActionResult Edit(int id) {
...
}
[HttpPost]
public ActionResult Edit(EditModel model) {
...
}
Post-Redirect-Get (PRG) 模式看起来很黑白,因为它本质上将每个 POST 重定向回 GET 操作。但是,我需要确信这是正确的做法。
我的计划是在 POST 操作中,如果模型有效,我将使用 Post-Redirect-Get 模式将用户发送到合理的位置(可能是 Index 或 Details 操作)。
但是,如果存在模型验证问题,我仍然想只显示视图。我不想重定向用户,因为这意味着将模型和 ModelState 填充到临时数据中并重定向到 GET 操作 - 然后将逻辑添加到 GET 操作中以处理临时数据。我可以通过简单地显示视图来避免所有这些。
是的,如果用户按下 F5,它将重新提交表单,并且他们将看到“重新提交警告”,但随后是同一页面(要求他们修复验证错误)。但是,他们似乎不太可能按 F5,而且也不存在重复提交的危险,因为表单将再次验证失败。
如果验证通过,用户将被重定向,并且不会重复提交。
那么我应该实现额外的代码并将数据填充到临时数据中以严格遵循 PRG 模式,还是在表单有效并且正在存储数据时使用 PRG 模式更明智?
【问题讨论】:
标签: asp.net-mvc post-redirect-get