VB.NET - registerstartupscript然后重定向到同一页面

时间:2016-10-20 14:29:28

标签: javascript asp.net vb.net

我继承了一个.NET 4.0应用程序,该应用程序使用一些带有调用Oracle过程的按钮的表单。通常,在按下这些按钮引起回发之前,RegisterStartupScript用于在执行后显示警报,因此在页面刷新之后。

现在,我想在用户按F5或刷新页面时禁用重新提交表单,我发现最直接的方法是使用Response.Redirect到同一页面而不是回发。所以,我尝试了以下内容:

Protected Sub btnButton_Click(sender As Object, e As System.EventArgs) Handles btnButton.Click
   Try
      ' Do something (call Oracle procedure)

      Dim TheScript As New StringBuilder
      TheScript.Append("<script language=JavaScript>alert(""Success!"");</script>")
      ClientScript.RegisterStartupScript(GetType(String), "ShowInfoPage", TheScript.ToString)

   Catch ex As Exception
      ' Do something
   End Try

   Response.Redirect(Request.Url.ToString(), False)
End Sub

但页面重新加载后不会触发警报(显然)。

此时我有两个问题:

  1. 是否有快速方式确保重定向不会丢失使用RegisterStartupScript记录的脚本?对于“快速”,我的意思是“使用转移而不是重定向”或不涉及重写警报管理代码的内容;
  2. 不要在代码的每个部分添加Response.Redirect,我如何拦截任何回发请求,以便将其替换为重定向到请求回发的同一页面?我想到了类似HttpModule之类的东西,虽然我对此没有多少经验(对不起,如果我说了一些毫无意义的事情)。
  3. 由于

1 个答案:

答案 0 :(得分:1)

最简单的方法是使用QueryString参数或Session到&#34;存储&#34;该事件已被触发。

第一个代码段使用QueryString:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
    If (Request.QueryString("status") = "success") Then
        ScriptManager.RegisterStartupScript(Page, Page.GetType, "ShowInfoPage", "ShowInfoPage(1)", true)
    End If        
End Sub

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs)
    Response.Redirect(Request.RawUrl.ToString() + "?status=success", false);
End Sub

如果您不希望QueryString参数可见,则可以使用Session:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)       
    If (Not (Session("status")) Is Nothing) Then
        If (Session("status").ToString = "success") Then
            ScriptManager.RegisterStartupScript(Page, Page.GetType, "ShowInfoPage", "ShowInfoPage(2)", true)
            Session.Remove("status")
        End If            
    End If        
End Sub

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs)
    Session("status") = "success"
    Response.Redirect(Request.RawUrl.ToString, false)
End Sub

我使用了this代码转换器,因此VB代码可能不是100%准确。

当用户按F5或默认刷新页面时,您无法阻止重新提交表单。这只是浏览互联网的固有行为。如果这仍然是一个问题,你应该考虑一下Ajax解决方案吗?

相关问题