在 Yesod 中进行确认对话框的最简单方法是什么?在某些情况下,当发布表单时,我想在执行操作之前要求确认。我想这是通过向用户发送一个单独的确认页面,然后在按下“是”按钮时处理发布的数据来实现的。
我认为这应该是可能的,使用像 setUltDestReferer 这样的函数。问题是,在 Yesod 中最简单/最典型的方法是什么?理想情况下,它应该归结为处理程序中的单个函数调用,就像 requireAuth 一样。
如果我理解正确,你想要的东西会
这立即提出了如何携带原始表单数据的问题。有一些方法可以解决这个问题,例如将其存储在会话中或将其包含在“是”链接中编码的 URL 中。
后一种方法有效,但可能有点混乱。当用户点击后退按钮、在新选项卡中打开链接等时,前者可能会导致问题。这来自于 HTTP 的无状态设计。
相反,创建一个新的 AJAX 处理程序并添加一些 JavaScript 可能会更简洁
我建议您采用@hammar 的方法,我认为这是最好的。如果由于某种原因不能选择 AJAX,您可以考虑在确认页面上放置一个隐藏表单,其中包含从第一页提交的表单数据。这应该是相当简单的使用runRequestBody
.