ファイルのアップロードに使用できるフォームがあり、アップロード後に更新ボタンを押しても重複アップロードがトリガーされないようにしたいと考えています。検討している方法はセッション変数とページリダイレクト(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を維持するにはどうすればよいですか? ページ ヘッダーからデータを選択的に削除する方法はありますか?