Fen*_*ton 17 asp.net-mvc post-redirect-get
我有一个用于编辑页面操作的宁静URL.这在控制器上实现为Edit方法,它接受GET请求和接受POST请求的Edit方法.
这意味着您可以访问编辑URL,它将显示GET表单或保存表单以进行POST.
[HttpGet]
public ActionResult Edit(int id) {
...
}
[HttpPost]
public ActionResult Edit(EditModel model) {
...
}
Run Code Online (Sandbox Code Playgroud)
Post-Redirect-Get(PRG)模式看起来非常黑白,因为它实质上将每个POST重定向回GET动作.但是,我需要确信这是正确的做法.
我的计划是在POST操作中,如果模型有效,我将使用Post-Redirect-Get模式将用户发送到合理的位置(可能是Index或Details操作).
但是,如果存在模型验证问题,我仍然只想显示视图.我不想重定向用户,因为这意味着将模型和ModelState填充到临时数据中并重定向到GET操作 - 然后将逻辑添加到GET操作中以处理临时数据.我可以通过简单地显示视图来避免所有这些.
是的,如果用户按下F5,它将重新提交表单,他们将显示"重新提交警告",但随后是同一页面(要求他们修复验证错误).但是,他们似乎不太可能会遇到F5并且也没有双重提交的危险,因为表单将再次无法通过验证.
如果验证通过,则将重定向用户,并且可以安全地进行双重提交.
那么我应该实现额外的代码并将数据填充到临时数据中以严格遵循PRG模式,还是在表单有效并且存储数据时使用PRG模式更明智?
KP *_*lor 21
如果表单信息有效,您应该只进行重定向; 在提交错误的情况下,从同一个Edit方法返回视图.
这样做,这样是符合PRG,因为如果你的模型是无效的,你是不是允许任何更改到服务器上的物体的状态进行.PRG主要用于防止多个帖子以不可预测的方式改变服务器对象(例如,业务对象,数据库表等)的状态; 但是,在您的验证示例中,用户可以根据需要多次重新提交,并且始终将它们发送回初始视图并显示验证错误 - 服务器上的任何内容都不会更改.因此,您说得对:只有在您的模型在表示层中通过验证时才会发出重定向.
| 归档时间: |
|
| 查看次数: |
9132 次 |
| 最近记录: |