質問

私がやろうとしているのは、MVCサイトでビューをレンダリングして、サーバーサイドの処理が行われている間にブラウザを更新しないようにユーザーに通知することです。これは長い実行タスクである可能性があり、彼らが更新された場合、それは再びリクエストを送信し、したがってプロセスが実際に成功したときにそれらをエラー画面に送信します。 JSでは、jquery $ .ajax(...)またはsimple $(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-->

何か案は?

役に立ちましたか?

解決

クライアントにある種のJavaScriptを呼び出すことなく、これを達成する方法はありません。

ユーザーへの応答を返すと、HTTPコード200(OK)で表示するページを返すか、301(永続的に移動)または307(一時的に移動)およびURLのHTTPコードでリダイレクトする命令のいずれかにリダイレクトする。

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

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

他のヒント

簡単な解決策の1つは、バックグラウンドプロセスを発射してから、(1)ユーザーに更新しないように依頼するページを表示することです。 3)完全であると判断したときにリダイレクトします。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top