2014-03-03 26 views
0

我送數組作爲「數據」值的AJAX調用到MVC控制器的(參數)。然後,控制器應該將用戶重定向到一個新頁面,但它不會。相反,我可以在預覽窗口中看到View正在返回,但通過ajax返回。我不知道我接近這個方式是否正確,因爲我似乎很難找到好的例子。我想避免使用Html.ActionLink,因爲我將有大約20個參數傳遞給控制器​​。如何導致MVC控制器重定向從一個Ajax調用用戶?

下面是數組發送到控制器的功能:

submit: function() { 
     var data = { 
      "ReqDepartment": (viewModel.reqDepartment === null) ? null : viewModel.reqDepartment, 
      "EquipmentGroup": (viewModel.equipmentGroup === null) ? null : viewModel.equipmentGroup, 
      "SiteCode": (viewModel.site === null) ? null : viewModel.site.SiteCode, 
      }; //header 
     $.ajax({ 
       type: "POST", 
       url: "/ArctecLogisticsWebApp/Requisitions/ReqsSummary/", 
       data: data, 
       traditional: true 
     }); 
    } 

這裏是控制器,ReqSearchCriteria是一個ViewModel:

public ViewResult ReqsSummary(ReqSearchCriteria criteria) 
    { 
return View("ReqsSummary", requisitionsRepository.GetReqsAdvancedSearch(criteria)); 
    } 

控制器被返回在AJAX調用視圖。我應該使用不同的方法將數組發送到控制器嗎?

+0

如果你的動作方法返回HTML,那麼你可以簡單地使用jQuery的'負荷()'方法,並用返回的HTML –

回答

1

Ajax調用本身不能重定向。你需要做的是從控制器返回JSON的視圖與作用的結果,如果行動成功,則重定向

$.ajax({ 
    type: "POST", 
    url: "/ArctecLogisticsWebApp/Requisitions/ReqsSummary/", 
    data: data, 
    traditional: true, 
    success: function(result){ 
     if(result.Success){ 
      window.location = '@Url.Action('Action', 'Contorller')'; 
     } 
    } 
}); 

編輯:

你的控制器方法會奏效。它應該與您重定向的形式不同,以消除混淆。通過數據你可以傳遞你需要的任何信息。

data: { id: $('.id').val() }, 

這樣的事情會通過任何值與類ID字段。然後在您的控制器上爲視圖和返回視圖創建模型。我到處都使用ajax調用,它們非常有用。如果您有任何其他問題,請告訴我。

+0

他們重定向自己更換頁面的內容,如果你返回正確的內容類型。 – Dismissile

+0

@馬特身體,動作的結果應該是將用戶重定向的,包括從使用所述AJAX調用傳遞的參數的存儲庫生成的數據。我開始認爲ajax電話不是重定向用戶的最佳方式。沒有任何答案對我有任何意義,所以我不能正確地提出問題。 –

+0

看到我上面的編輯。如果您有任何其他問題,請告訴我。 –

1

你不要來檢查你的成功/完成處理程序的結果,然後手動進行重定向。實際上,你可以從你的控制器返回一個JavascriptResult,它會爲你重定向:

$.ajax({ 
    type: 'post', 
    url: '/Home/DoStuff' 
}); 

[HttpPost] 
public ActionResult DoStuff() 
{ 
    return JavaScript(string.Format("window.location='{0}';", Url.Action("About"))); 
} 

如果你想獲得看上你甚至可以創建一個照顧格式爲您新的ActionResult類型。或者您可以檢測它是否是AjaxRequest,並確定您是否應該執行RedirectToAction或JavaScript結果。

+0

@Dismissle,我真的不明白你是如何的解決方案將在我的情況下工作。我將有大約20個參數傳遞給控制器​​,然後控制器將使用這些參數填充不同的視圖並將視圖返回給用戶。我可以通過使用ActionLink並連接所有參數來完成這項工作,但我正在尋找更清晰的解決方案。對不起,如果我在這裏沒有足夠清楚。 –

+0

因此,將參數添加到ajax調用。你剛剛問過你如何從AJAX調用重定向。我正在展示相關部分。如果你返回的window.location ='...'的JavaScript結果,它會重定向。 – Dismissile

相關問題