2011-01-07 4 views
0

Привет есть следующий код на мой взгляд (JQuery):Перенаправление после EndInvoke в ASP.NET MVC

$.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); 
    } 

Переадресация игнорируется. Response.Redirect также не работает, поскольку HTTP-заголовки уже отправлены. Я попытался изменить window.location из javascript, это работает, но я не могу передать идентификатор параметра ViewData. Любая идея решить это?

ответ

1

Вы уверены, что заголовки уже отправлены? Я не очень разбираюсь в асинхронных контроллерах, но я бы сомневался, что он сразу же отправит любые заголовки. Моя первая мысль заключалась в том, что браузер не обрабатывает ответ перенаправления на вызов ajax. Вам, вероятно, понадобится реализовать некоторую логику, которая отправит результат с URL-адресом, и ваш делегат success в jQuery ищет этот фрагмент данных, а затем выполняет перенаправление через javascript (т. Е. window.location).

HTH

+0

Благодарим за ответ. На самом деле почтовый вызов jquery выполняется кнопкой. В этот момент представление было отображено контроллером. Trying Response.Redirect вместо перенаправления приводит к исключению HttpException: «Невозможно перенаправить после отправки HTTP-заголовков». – Apocatastasis

+0

И да, я могу где-то сохранить этот идентификатор и вернуться к нему позже (т. Е. В базе данных). Это та часть, которую я пытаюсь избежать. – Apocatastasis

+0

Даже если javascript вызывается из-за нажатия кнопки, он по-прежнему является ajax-вызовом, даже в соответствии с документацией jQuery. Кроме того, RedirectToAction принимает имя действия, а не виртуальный путь, поэтому, хотя это может и не быть вашей непосредственной проблемой, это будет один из них в ближайшее время. Я бы предложил не отправлять перенаправление, но отправляя ответ, который ваш делегат 'success' может оценить и определить, на какую страницу перейти и использовать' window.location', чтобы выполнить перенаправление на стороне клиента. –