MVCでビューをレンダリングし、すぐにリダイレクトします
-
29-09-2019 - |
質問
私がやろうとしているのは、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)完全であると判断したときにリダイレクトします。