在提交时张贴重定向获取(PRG)摘要页面



所以我读到了这个名为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)

问题是,如何在重定向上显示此消息,这直接源于提交,最好不要进行任何进一步刷新?或者只是简单地显示消息,而不管刷新,只要是最简单、最有意义的。谢谢;)

只显示一次这样的消息的诀窍是使用"flash"会话数据的概念。

这种方法通常是在重定向之前将"消息"(或与"成功"相关的任何其他数据)存储在会话中。然后,在处理重定向时,请确保在发送"成功页面"响应之前,从会话中删除闪存数据。

这样,如果用户试图返回成功页面,闪存数据将不会出现在要拾取的会话中,因此不会显示两次。为了对用户友好,如果用户试图访问Post Redirect get流之外的成功页面,您可以检查闪存数据是否丢失,并显示一条漂亮的错误消息。

这正是Grails框架(在Groovy世界中)所做的,而且它运行得非常好。

最新更新