2011-01-07 10 views
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を渡すことができません。これを解決するための任意のアイデア?

答えて

1

ヘッダーはすでに送信されていますか?私は実際には非同期コントローラではありませんが、すぐにヘッダーを送信し始めるのではないかと疑いがあります。私の最初の考えは、ajax呼び出しに対するリダイレクト応答がブラウザによって処理されないことです。おそらくURLを使って結果を返信するロジックを実装し、jQueryのsuccess代理人がそのデータを探してからjavascript(つまりwindow.location)でリダイレクトするようにする必要があります。

HTH

+0

ありがとうございます。実際にはjqueryのポストコールはボタンで実行されます。この時点で、ビューはコントローラによってレンダリングされました。リダイレクトの代わりにResponse.Redirectを実行すると、HttpExceptionが発生します。「HTTPヘッダーが送信された後はリダイレクトできません。 – Apocatastasis

+0

そして、はい、どこかでそのIDを保存し、後で(データベース内に)戻すことができます。これは私が避けようとしている部分です。 – Apocatastasis

+0

ボタンクリックのためにjavascriptが呼び出されたとしても、jQueryのドキュメントに従っても、それはまだajax呼び出しです。また、RedirectToActionは仮想パスではなくアクション名を取ります。そのため、あなたの直面する問題ではないかもしれませんが、それはずっと以前のものになります。私はリダイレクトを送信しないことを提案しますが、あなたの '成功'代理人が評価してどのページをどこに送るかを決定し、 'window.location'を使ってリダイレクトクライアント側を行うことができるという応答を送信します。 –

関連する問題