对于成功的用例,Post/Redirect/Get(PRG)工作流程非常简单:只需将(客户端)重定向到所需的页面即可.但是在服务器端验证期间遇到错误并且我们想要在再次显示输入页面时保留输入的情况呢?
据我所知,有两种方法:在错误期间简单地重新呈现输入页面(即没有重定向)(因此忽略PRG模式); 或者,重定向到输入页面,并在渲染期间将之前的输入存储在稍后可以检索的某处(例如会话).两者都有缺点:首先,我们会遇到PRG模式帮助我们避免的问题(例如书签,双重提交); 第二种方法导致不一致的GET(第一次GET将找到存储的输入,后续的GET可能不会).还有其他替代方案吗?我希望社区提供有关如何最好地处理此案件的意见.
我通常以您描述的第一种方式执行此操作 - 仅在成功提交时重定向.很难看到为包含无效数据的表单添加书签的真实用例; 另一方面,将确认页面加入书签(成功提交后)通常是有意义的.
如果用于填写表单的URL是POST表单的URL,我认为不存在问题.如果输入有效,则重定向和GET.如果它无效,请重新显示填写的表单.这样,交互看起来像:
GET /your-url => blank form POST /your-url (success) => Redirect => GET /success-url POST /your-url (failure) => filled-in form