2016-10-20 24 views
3

Oracleプロシージャを呼び出すボタンを持つフォームを使用する.NET 4.0アプリケーションを継承しました。多くの場合、これらのボタンを押すことによってポストバックが発生する前に、RegisterStartupScriptを使用して実行後に​​ページを更新した後に警告を表示します。VB.NET - registerstartupスクリプトが同じページにリダイレクト

ユーザーが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 

しかし、警告は(明らかに)ページの再読み込み後に発生しません。リダイレクトがRegisterStartupScriptで記録されたスクリプトの損失を伴わないことを確認する迅速方法はあり

  1. :この時点で

    私は2つの質問がありますか? 「速い」とは、たとえば、「リダイレクトの代わりに転送を使用する」、またはアラート管理コードの書き換えに関係しないものを意味します。
  2. コードの各部分にResponse.Redirectを追加しないで、ポストバックを要求した同じページにリダイレクトするために、どのようなポストバック要求を傍受することができますか?私はHttpModuleやそれに類するものを考えましたが、私はこれについて多くの経験がありませんでしたが(無意味なことを言ったら申し訳ありません)。

おかげ

答えて

1

最も簡単な方法は、イベントがトリガされたことを「ストア」にQueryStringパラメータまたはSessionを使用しています。

最初のスニペットはQueryStringに使用しています。あなたがた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 

を:私はthisコードトランスレータを使用

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 

ので、 VBコードは100%正確ではないかもしれません。

ユーザーがF5キーを押すか既定でページを更新するときに、フォームの再送信を防止することはできません。これは、インターネットブラウジングの固有の動作です。この問題が引き続き発生する場合は、Ajaxソリューションを検討する必要がありますか?

+0

これは良い方法かもしれません(私はQueryStringの代わりにSessionを使うことを好むかもしれませんが)私のケースでは、コードを書き換えて、非常に多くのケースを考慮する必要があります( "status"と "success"氷山)私はDB側で複数の提出を管理することを好む –

関連する問題