2

私がやろうとしているのは、MVCサイトでビューをレンダリングして、サーバー側の処理が行われている間はブラウザーを更新しないようにユーザーに通知することです。これは長時間実行されるタスクである可能性があり、更新を押すとリクエストが再度送信されるため、プロセスが実際に成功したときにエラー画面に送信されます。これは、JSでJQuery $ .ajax(...)または単純な$(document).ready(function(){window.location = ...});を使用して実行する予定でした。しかし、MVCでそれを行う方法があることを望んでいたので、クライアントの呼び出しに返されるHttpResponseCodeをより細かく制御できます。これを行う方法はありますか?

私はの線に沿って考えていました

    public ActionResult LoadingAsync(string UserKey, string userInf)
    {
        AsyncManager.OutstandingOperations.Increment();

        CallProcess(...)

        return View();
    }

次に、完了したアクションにリダイレクトを実行させます

   public ActionResult LoadingCompleted()
    {
        LongRunningProcess();
        return Redirect("http://yourdone.com");
    }

または、ビュー内からリダイレクトを実行するビュー内にレンダリングするものがあります

    <% Html.RenderAction("Process"); %><!--This won't actually redirect-->

何か案は?

4

2 に答える 2

0

簡単な解決策の1つは、バックグラウンドプロセスを起動してから、(1)ユーザーに更新しないように要求するページを表示し、(2)Javascriptを介してサーバーを数秒ごとにポーリングして、バックグラウンドプロセスが完了したかどうかを判断することです。 3)完了したと判断してリダイレクトします。

于 2010-08-19T18:39:33.947 に答える
0

クライアントでなんらかのJavascriptを呼び出さずに、これを実現する方法はありません。

ユーザーに応答を返すときは、HTTPコード200(OK)で表示するページを返すか、HTTPコード301(永続的に移動)または307(一時的に移動)とURLでリダイレクトするように指示します。リダイレクト先。

これらの戻り値のいずれかを選択する必要があり、両方を返すことはできません。

最も簡単な解決策は、バックグラウンドプロセスが完了したと判断したら、Javascriptを使用してユーザーを「お待ちください」ページから宛先にリダイレクトすることです。

于 2010-08-19T18:58:57.473 に答える