0
こんにちは後の私の見解(jQueryの)に次のコードを持っている:リダイレクトASP.NET MVCでEndInvokeを
$.post('<%=Url.Content("~/Customer/StartLongRunningProcess")%>');
WICHは、非同期呼び出しを起動する(C#の):
public void StartLongRunningProcess()
{
ProcessTask processTask = new ProcessTask();
processTask.BeginInvoke(new AsyncCallback(EndLongRunningProcess), processTask);
}
最後に、結果を
public void EndLongRunningProcess(IAsyncResult result)
{
ProcessTask processTask = (ProcessTask)result.AsyncState;
string id = processTask.EndInvoke(result);
RedirectToAction("~/SubscriptionList/SubscribedIndex/" + id);
}
リダイレクトは無視されます。 HTTPヘッダがすでに送信されているため、Response.Redirectも失敗します。私はjavascriptからwindow.locationを変更しようとしましたが、これはうまくいきますが、ViewDataでパラメータidを渡すことができません。これを解決するための任意のアイデア?
ありがとうございます。実際にはjqueryのポストコールはボタンで実行されます。この時点で、ビューはコントローラによってレンダリングされました。リダイレクトの代わりにResponse.Redirectを実行すると、HttpExceptionが発生します。「HTTPヘッダーが送信された後はリダイレクトできません。 – Apocatastasis
そして、はい、どこかでそのIDを保存し、後で(データベース内に)戻すことができます。これは私が避けようとしている部分です。 – Apocatastasis
ボタンクリックのためにjavascriptが呼び出されたとしても、jQueryのドキュメントに従っても、それはまだajax呼び出しです。また、RedirectToActionは仮想パスではなくアクション名を取ります。そのため、あなたの直面する問題ではないかもしれませんが、それはずっと以前のものになります。私はリダイレクトを送信しないことを提案しますが、あなたの '成功'代理人が評価してどのページをどこに送るかを決定し、 'window.location'を使ってリダイレクトクライアント側を行うことができるという応答を送信します。 –