MVC RedirectToAction и XMLHttpRequest отправка - PullRequest
3 голосов
/ 12 июля 2011

У меня есть форма, которая может содержать файлы, и она показывает индикатор выполнения успешно. Моя проблема в том, что в контроллере MVC у меня есть:

return RedirectToAction("Complete", new { title = title });

Этот метод запускается и выполняет метод Complete, если я прошел через него, но затем возвращается к событию загрузки JavaScript и не перенаправляет меня, пока я не добавлю перенаправление JavaScript в прослушивателе события загрузки (uploadComplete):

var xhr = new XMLHttpRequest();
xhr.upload.addEventListener("progress", uploadProgress, false);
xhr.addEventListener("load", uploadComplete, false);
xhr.addEventListener("error", uploadFailed, false);
xhr.addEventListener("abort", uploadCanceled, false);
xhr.open("POST", "/Submit-Recipe", true);
xhr.send(fd);

function uploadComplete(evt) { 
//var valueFromController = how do I get a value here?;       
//window.location.replace("http://@ConfigurationManager.AppSettings["website"]/SubmitRecipeComplete/" + valueFromTheController);
}

Есть ли способ не добавлять редирект JavaScript? Если мне нужен JavaScript-редирект, как я могу передать переменную обратно из контроллера, когда она должна быть ActionResult (если есть ошибка и мне нужно заново отобразить страницу?).

Я могу обойти это, добавив вторую страницу, где я мог бы знать «valueFromController», но 2 формы немного нарушают рабочий процесс.

EDIT

Я сделал то, что сказал Правин, но GetData () не работал для меня, поэтому я использовал это вместо:

evt.currentTarget.responseText 

Чтобы определить, возвращать ли представление или содержимое, я добавил это непосредственно перед xhr.send (fd);

xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');

В контроллере я могу сделать:

if (Request.IsAjaxRequest())
{
    return Content(title);
}     

1 Ответ

1 голос
/ 12 июля 2011
public Class myContoller:controller
{
     public ActionResult MyAction()
     {
     bool isWantToRedirect;

     if(isWantToRedirect)
     {
       return Content('redirect');
     }
     else
     {
          return View(); 
     }
}



function uploadComplete(evt) { 

 var valueFromController = evt.GetData();

  if(valueFromController=="redirect")
  {
     //redirect
  }
  else
  {
     //do not redirect, do something else
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...