我有一个表单,可以包含文件,并且成功显示进度条。我的问题是,在MVC控制器中,我有以下代码:
return RedirectToAction("Complete", new { title = title });
如果我进行单步调试,它会执行 Complete 方法,但然后回到 JavaScript 的 load 事件,并且除非我在 load 事件侦听器(uploadComplete)中添加 JavaScript 重定向,否则它不会将我重定向:
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(例如出现错误需要重新显示页面时)时,如何从控制器传回变量?
我可以通过添加第二个页面来解决这个问题,但两个表单会有些影响工作流程。
编辑:
我按照Praveen说的做了,但是GetData()对我无效,所以我改用了这个:
evt.currentTarget.responseText
在 xhr.send(fd) 之前,为了确定是返回视图还是内容,我添加了以下代码。
xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
在控制器中,我可以这样做:
if (Request.IsAjaxRequest())
{
return Content(title);
}