2016-07-14 15 views
2

私はいくつかのボタンが付いた通常のasp.netページを持っています。私はStop Requestのような1つのボタンを持っているので、どのボタンがクリックされたとしても、このボタンをクリックしてページをリフレッシュすることができます。ASP.NETで要求中に別のページにリダイレクトする方法

<asp:Button ID="btnRefresh" runat="server" OnClick="btnRefresh_Click" ToolTip="Click to generate report based on parameters selected above" 
             Text="Run Report" Width="100px" /> 
<asp:Button ID="btnCancelRequest" runat="server" Text="Stop Request" OnClientClick="javascript:return CancelRequestClick();"/> 

だから、btnRefreshは、SQLクエリを実行し、バックエンドのロジックを行い、ポストバックを行いますので、ここで私のアイデアの一例です。すべてが完了するまでに10〜20秒かかるとしましょう。このようなボタンはもう少ししかありません。それらのうちのいくつかは重いSQLクエリを実行し、それらのうちのいくつかは後で長時間の実行コードを作成します。私はbtnCancelRequestボタンを持って、ページをリフレッシュするだけです。これは、ユーザーの変更なしにクリーンなページを戻すことになります。

はここでJSコード

function CancelRequestClick() { 
    window.location.href("RateReport.aspx"); 
    return false; 
}; 

これは、それがクリックされたときに実行されるコードをJSとバックの応答を待機しないようにする方法はありますか? JavaScriptで

+1

質問は少しわかりにくいです。ボタンをクリックすると、サーバー側でいくつかのコマンドを実行し、完了するまで待たずにUIに戻りますか?または、既に背景で実行されているものをキャンセルしたいですか? – Win

+0

現在のリクエストをすべてキャンセルする機能が必要です。ユーザーが実行ボタンをクリックして、バックボタンまたはユーザーのクリックボタンでヒーブクエリーを実行し、バックの他のヒーブロジックを実行すると、いつでもページを取り消してリフレッシュできるようにしたいと考えています – Bryuk

答えて

0

、window.stop()、少しトリッキー、ジャバスクリプトせずにブラウザローディング

function CancelRequestClick() { 
    window.stop(); 
    window.location.href("RateReport.aspx"); 
    return false; 
}; 

を停止し、フォームをsubmitingする他の要求を取り消すことができ、例えば、ダミーは、同じページに提出します

<form action="YourAspxPage.aspx" method="get"> 
    <input type="submit" value="cancel"> 
</form> 

キャンセル押すと

+0

コードのみの回答は推奨されません。あなたの答えを編集して、これがなぜ問題を解決するのか説明してください。 –

+0

こんにちは。まず第一に、私はIEで作業していると私はそのwindow.stopを見つけた。 IEによってサポートされていません。だから、私はdocument.execCommand( "Stop")を使うことができます。しかし、これは役に立たなかった。私のページはまだ応答の終わりまで待ってから、それが更新されます... – Bryuk

+0

なぜあなたはもう一度ページをリロードできませんか? 「btnRefresh_Click」をリフレッシュしたときと同じようにクリックをクリックすると、「STOPボタン」の別のイベントを作成してそのクリックでページをリロードするだけですか? Response.Redirect( "YourAspxPage.aspx"); ' –

0

をそのページにダミーフォームを送信、および他のプロセスを停止します私はすべての現在の要求を取り消す能力を持ちたいと思う。ユーザー 実行]ボタンをクリックして、それが背中にヒーブクエリを実行したり、ユーザーが ボタンをクリックし、それは私が したい任意の時点でページをキャンセルしてリフレッシュする能力を持っているバック上の他のヒーブロジックを実行した場合

ファーストHTTPはステートレスです。これは、リクエストが提供されたときに、UIスレッドがもう使用できなくなったことを意味します。その結果、あなたはキャンセルするタスクを知らない。

達成したいことはありません。しかし、回避策があります。その後、タスクが行くとIsCancelledフラグについては非常に頻繁にチェックするために聞かせて

UserId, TaskType, IsCancelled 

- 長時間実行されるタスクをトリガした後、あなたは次のようにデータベースのレコードを挿入します。

キャンセルする場合は、IsCancelledフラグをtrueに設定します。タスクがそれを見ると、を実行するまで、それ自体はキャンセルされます。

理想的には、長時間実行されるジョブにはHangfireまたはQuartz.Netのようなスケジューラを使用したいが、それはあなたの質問の範囲外である。

関連する問題