3
我有一个表单,可以包含文件,并显示成功进度条。我的问题是,在MVC控制器我有:MVC RedirectToAction和XMLHttpRequest发送
return RedirectToAction("Complete", new { title = title });
这正好和我是否步,但随后又回到了JavaScript load事件,除非我添加了一个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个窗体有点打破了工作流程。
编辑
我做了什么,普利文表示,但的GetData()并没有为我工作,所以我用这个来代替:
evt.currentTarget.responseText
要确定是否回到我加入这个视图或内容就在xhr.send(fd)之前;
xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
在控制器我可以然后执行:
if (Request.IsAjaxRequest())
{
return Content(title);
}
RedirectToAction仅用于由控制器,它不重定向返回到Web浏览器,即,HTTP 302或HTTP 301 –