0

わかりました、私は特に紛らわしい問題を抱えており、それを修正するための最善の選択肢がわかりません. ボタンのあるasp.netページがあり、ボタンのハンドラーが(すぐに制御できない/修正できない理由で)完了するまでに時間がかかることがあります。ハンドラーの最後に、Response.Redirect 呼び出しがあります。ボタン ハンドラーの実行中にユーザーが [更新] をクリックすると、ボタンを押したときのハンドラーの実行が終了します (正常) が、Response.Redirect を処理する代わりに、ページがリロードされます。

これが起こっていることを理解するのに永遠にかかりましたが、それを理解すると、非常に単純なサンプルコードでそれを再現することができました. VS 2010 (.Net 4 を対象) で新しい C# .Net Web プロジェクトを作成し、ホームページにボタンを追加しました。

<asp:button id="btnSubmit" runat="server" OnClick="btnSubmit_Click" text="Submit"/>

次に、10 秒間だけスリープするようにハンドラー コードを追加しました (リフレッシュする時間を与えるため):

protected void btnSubmit_Click(object sender, EventArgs e)
{
    Thread.Sleep(10000);
    Response.Redirect("about.aspx");
}

案の定、ボタン ハンドラーを実行すると (明らかに、期待どおり) 正常にリダイレクトされますが、その 10 秒間の Thread.Sleep 中に更新を押すと、response.Redirect は無視されます。

その Response.Redirect に従わせる方法を見つける必要があります。ユーザーが Refresh を押すことによってトリガーされる Page_Load イベントでそれを処理する必要があると感じています (つまり、「handling_button」などのように作成されるセッション変数を持つか、チェックして、検出された場合はリダイレクトするだけですページの読み込み、リダイレクトの場所に到達すると削除されます)、しかし、ここで見逃しているもので、もう少しエレガントなものがあることを願っています.

4

1 に答える 1

1

f5押すと、現在のページを破棄し、現在のアドレスに対して新しいリクエストを行うようブラウザに指示します。

あなたがやろうとしていることに対する明確な解決策はないと思います。

javascript にはwindow.onbeforeunloadプロパティがありますが、リロードが要求された時点でナビゲーション イベントが既に開始されているため、ここでは機能しないと思います。

唯一の解決策は、リクエストがまだ行われているかどうかを検出するテストを元のページに置くことです。

フォーム送信時に JavaScript イベント ハンドラーを使用してスピナーも表示すると、ユーザーの認識に役立つ場合があります。

于 2013-04-29T18:57:36.403 に答える