MVC RedirectToAction and XMLHttpRequest send

3

我有一个表单,可以包含文件,并且成功显示进度条。我的问题是,在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);
}     

RedirectToAction仅由控制器使用,它不会返回一个重定向到Web浏览器,即HTTP 302或HTTP 301。 - ThatGuyInIT
1个回答

1
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
   }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接