Ajax调用C#控制器操作无法正常工作

时间:2017-04-26 16:38:16

标签: c# ajax

由于某些原因,我无法使用我的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
        });

2 个答案:

答案 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);
}