我有一个用于编辑页面的RESTful URL。在控制器上,这被实现为一个Edit方法。该方法接受GET请求和一个接受POST请求的Edit方法。
这意味着您可以访问Edit 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 模式更合理呢?