1

ファイルのアップロードに使用できるフォームがあり、アップロード後に更新ボタンを押しても重複アップロードがトリガーされないようにしたいと考えています。検討している方法はセッション変数とページリダイレクト(post/redirect/getパターン)ですが、どちらも問題があります

セッション変数

問題はページ間で共有されているため、ユーザーが同じロジックを使用して複数のページを開いている場合、または同じページの複数のコピーを異なるレコードで開いている場合、更新が誤って検出される可能性があります。もう 1 つの問題は、セッション状態が期限切れになることです。そのため、あまり信頼できません。ただし、誰かに役立つ場合に備えてコードを投稿します。この関数はページの on_load イベントで呼び出す必要があり、その戻り値はフォームの送信イベントでチェックされる変数に割り当てられます。

Private Function checkForRefreshOnLoadAfterPostback() As Boolean
    Dim refreshed As Boolean = (Page.IsPostBack AndAlso Session("GuidOnloadPostbackRefreshCheck") <> ViewState("GuidOnloadPostbackRefreshCheck"))
    Session("GuidOnloadPostbackRefreshCheck") = Guid.NewGuid().ToString()
    ViewState("GuidOnloadPostbackRefreshCheck") = Session("GuidOnloadPostbackRefreshCheck")
    Return refreshed
End Function

投稿/リダイレクト/取得

オプション 2 は、フォーム送信が処理された後にページをリダイレクトすることですが、私のページには、可能であれば値を保持したい他のフォーム コントロールを含むタブがあります。だから私の質問は、更新後にフォームが2回送信されるのを防ぎながら、ページのviewStateを維持するにはどうすればよいですか? ページ ヘッダーからデータを選択的に削除する方法はありますか?

4

0 に答える 0