У меня есть форма, которая может содержать файлы, и она показывает индикатор выполнения успешно. Моя проблема в том, что в контроллере 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);
}