因此,我阅读了这种称为 PRG 的方法,作为解决表单双重提交问题的一种方法。但是,我还没有找到向用户显示摘要页面/成功消息的下降实现。我能想到的唯一方法是存储会话变量,但我不希望它在多次刷新时持续存在。它应该显示消息/摘要一次,然后完成。此外,如果用户无法返回到先前提交的页面,那就更理想了。
这是我的 PRG 代码:
Protected Sub InsertRequest() Handles wizard.FinishButtonClick
Using connection As New SqlConnection(connectionStr)
Dim insertQuery As New SqlCommand("spInsertRequest", connection)
insertQuery.CommandType = CommandType.StoredProcedure
'1 - SETUP SQL PARAMETERS (omitted for brevity)
'2 - POST (inserts record into DB)
Try
connection.Open()
insertQuery.ExecuteNonQuery()
connection.Close()
Catch ex As Exception
Logger.WriteToErrorLog(Me, ex.Source, ex.Message, ex.StackTrace)
End Try
'3 - REDIRECT (to the same page and...)
Try
Dim urlRedirect As String = If(IsNothing(Request.Url), "", IO.Path.GetFileName(Request.Url.AbsolutePath)) 'Gets the filename of the current page.
If Not String.IsNullOrEmpty(urlRedirect) Then
Session.Add("referrerPage", urlRedirect) 'Used for identifying when the page is being redirected back to itself.
PageExt.AddParam(urlRedirect, "id", recID.ToString)
Response.Redirect(urlRedirect)
End If
Catch ex As Exception
Logger.WriteToErrorLog(Me, ex.Source, ex.Message, ex.StackTrace)
End Try
End Sub
'4 - GET (Display 'Success' message/summary here)
问题是,如何在直接由提交产生的重定向上显示此消息,并且最好不要进行任何进一步的刷新?或者只是简单地显示消息而不管刷新,无论是最简单且最有意义的。谢谢 ;)
使此类消息仅显示一次的技巧是使用“闪存”会话数据的概念。
通常的工作方式是在重定向之前将“消息”(或与您需要的“成功”相关的任何其他数据)存储在会话中。然后,在处理重定向时,请确保remove在发送“成功页面”响应之前来自会话的闪存数据。
这样,如果用户尝试返回成功页面,闪存数据将不会在要拾取的会话中,因此您不会让它显示两次。为了对用户友好,您可以检查闪存数据是否丢失,并在用户尝试在 Post-Redirect-Get 流程之外访问成功页面时显示一条友好的错误消息。
这正是 Grails 框架(在 Groovy 世界中)所做的事情,而且效果非常好。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)