2011-07-12 13 views
3

ファイルを格納できるフォームがあり、プログレスバーが正常に表示されます。MVC RedirectToActionとXMLHttpRequest send

return RedirectToAction("Complete", new { title = title }); 

これは行くと私はステップスルーが、それはその後、JavaScriptのloadイベントに戻り、リダイレクト、私はJavaScriptを追加しない限り、私をリダイレクトしていない場合は完全なメソッドを実行します。私の問題は、MVCコントローラに私が持っているということですロードイベントリスナ(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番目のページを追加することでこの問題を回避できますが、2つのフォームはワークフローを少し破損します。

evt.currentTarget.responseText 

を私はこれを追加表示やコンテンツを返すようにするかどうかを決定するために:私はPraveenさんが言ったことをやったが、GetDataの()ので、私の代わりにこれを使用する私のために動作しませんでした

EDIT

xhr.send(fd)の直前。

if (Request.IsAjaxRequest()) 
{ 
    return Content(title); 
}  
+0

RedirectToActionコントローラのみで使用され、それがWebブラウザにリダイレクトを返さない、つまりHTTP 302またはHTTP 301:私はそれから行うことができ、コントローラで

xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); 

答えて

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