2017-04-26 99 views
0

出於某種原因,我無法使用我的AJAX請求將ID列表傳遞到我的控制器操作中。我得到了下面的404控制檯錯誤。誰能告訴我爲什麼會發生這種情況?Ajax調用C#控制器操作不起作用

錯誤

無法加載資源:服務器與404(未找到) http://localhost:8088/Clients/VolDashboard/getViewsAssigned?candidateIds%5B%5D=177

控制器動作

public JsonResult getViewsAssigned(List<long> candidateIds) 
    { 
     long clientId = webRequestState.ClientId.Value; 
     long clientUserId = webRequestState.ClientUserId.Value; 
     return Json(clientViewService.getViewsAssignedToCandidates(candidateIds, clientId, clientUserId), JsonRequestBehavior.AllowGet); 
    } 

AJAX請求

狀態迴應 個
$.ajax({ 
      type: "GET", 
      url: "../Clients/VolDashboard/getViewsAssigned?" + $.param({ candidateIds: populateSelectedCandidateIds() }), 
      success: Success, 
      error: Errors 
     }); 
+0

公共JsonResult getViewsAssigned(名單 candidateIds)是不正確的。 – loneshark99

回答

0

問題是您的C#方法期望List<long>作爲參數類型。根據您的網址,您只需發送int(可將其轉換爲單個long)。問題是它不是一個集合,所以它無法找到路線。 404 HTTP代碼是正確的。

在這種情況下,你是URL編碼列表,你最好的選擇可能是將它作爲字符串傳遞。

$.ajax({ 
    type: "GET", 
    url: "../Clients/VolDashboard/getViewsAssigned?" + 
      $.param({ candidateIds: 
       populateSelectedCandidateIds().toString() 
      }), 
    success: Success, 
    error: Errors 
}); 

那麼你就需要調整您的C#方法是這樣的:

public JsonResult getViewsAssigned(string candidateIds) 
{ 
    List<long> idList = candidateIds.Split(',').Select(long.Parse).ToList(); 
    long clientId = webRequestState.ClientId.Value; 
    long clientUserId = webRequestState.ClientUserId.Value; 
    return Json(clientViewService.getViewsAssignedToCandidates(idList, clientId, clientUserId), JsonRequestBehavior.AllowGet); 
} 
+0

這工作就像一個魅力!非常感謝!!! –

0

通過數據屬性嘗試傳遞參數:

var data = populateSelectedCandidateIds(); 
$.ajax({ 
type: "GET", 
data: {candidateIds: data}, 
url: "../Clients/VolDashboard/getViewsAssigned", 
success: Success, 
error: Errors 
}); 

您還可以看到接受的答案here得到的主要思想。