由于某些原因,我无法使用我的AJAX请求将id列表传递到我的控制器操作中。我收到以下404控制台错误。谁能告诉我为什么会这样?
错误
无法加载资源:服务器响应状态为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 :(得分:0)
尝试通过data属性传递参数:
var data = populateSelectedCandidateIds();
$.ajax({
type: "GET",
data: {candidateIds: data},
url: "../Clients/VolDashboard/getViewsAssigned",
success: Success,
error: Errors
});
您还可以看到已接受的答案here以获得主要想法。
答案 1 :(得分: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);
}