ページは多数のタスクを実行し、処理に長い時間がかかります。各タスクが完了するたびに、ユーザーにフィードバックを提供したいと考えています。
使用した ASP.NET Web フォームでResponse.Flush()
ASP.NET MVC でこれにどのようにアプローチしますか?
ページは多数のタスクを実行し、処理に長い時間がかかります。各タスクが完了するたびに、ユーザーにフィードバックを提供したいと考えています。
使用した ASP.NET Web フォームでResponse.Flush()
ASP.NET MVC でこれにどのようにアプローチしますか?
ネットワークに送信するステータスにかかわらず、Response.Write() と Response.Flush() を引き続き使用できます。または、ユーザーコントロールに進行状況がある場合は、次のようにすることができます。
this.PartialView("Progress").ExecuteResult(this.ControllerContext);
this.Response.Flush();
コントローラーのアクション メソッドで長い操作を実行しているときに、コントローラーから。
ここのコメントに記載されているように、これまたはクライアント側のアプローチを選択するのはあなた次第ですが、サーバー側はまだ可能であることを指摘したかっただけです.
進行状況を表示するには、AJAXを使用することをお勧めします。アイデアのリンクを参照してください。
2 つの基本的な方法があります。
ステータスを返すサーバー ページをポーリングし、操作が完了すると結果ページにリダイレクトします。MVC はこの方法とは関係ありません。サーバー変数を使用してオブジェクト/ステータスを保存する必要があります。これは、(おそらく) セッション変数などを使用しているため、標準の Asp.NET アプリケーションに関連する方法です。とりあえず。
クライアントからサーバー上の Web サービスへの AJAX 呼び出し。Asp.NET MVC は jQuery フレームワークを導入する予定なので、それをクライアント呼び出しと応答のイベント処理に使用します。これは、セッション状態などを使用しない/使用すべきではないMVCの精神に近いものです.
クライアント側で作成できます。各ステップで、現在のステップでいくつかのセッション変数を設定します。次に、コントローラーで「GetProgress」という別のアクションを実行し、ビューとURIを割り当てます。
アクションでは、このセッションを確認し、タスクの現在の進行状況を返します。クライアント側でタイマー(つまりsetTimeOut)を作成し、特定の時間(1秒程度)ごとに後のコントローラーアクションのURIを呼び出します。それだ。
私個人的には、2つのオプトインを検討します。