2011-07-12 52 views
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); 
}  
+0

RedirectToAction僅用於由控制器,它不重定向返回到Web瀏覽器,即,HTTP 302或HTTP 301 –

回答

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