我正在尝试使用ajax将复选框的ID传递给控制器。这是jquery:
function compareEvents() {
var selected = new Array();
$('input:checked').each(function () {
selected.push($(this).attr('id'));
alert("Event " + $(this).attr('id') + " will be compared");
});
$.ajax({
url: "/Event/CompareEvents",
contentType: "application/x-www-form-urlencoded",
type: "POST",
datatype: "json",
data: JSON.stringify({eventIds:selected}),
error: function (xmlHttpRequest, errorText, thrownError) {
alert(xmlHttpRequest, errorText, thrownError);
},
success: function (data) {
alert("success");
document.location = data;
}
});
警报成功返回已选中复选框的ID。并在完成后返回成功消息。
这是控制器方法:
[HttpPost]
public ActionResult CompareEvents(List<int> eventIds)
{
return null;
}
这成功调用,除非我调试,eventIds
正在返回null
。任何人都可以看到为什么eventIds
没有得到正确的值?
答案 0 :(得分:2)
您正在发送JSON:
data: JSON.stringify({ eventIds:selected }),
并将contentType标头设置为"application/x-www-form-urlencoded"
。
与您发送的内容保持一致:
contentType: "application/json",
此外,没有名为datatype
的此类设置。实际设置为dataType
,但它是多余的,因为如果您的控制器操作将Content-Type响应标头设置为application/json
(如果您返回JsonResult
通常应该这样做),jQuery足够智能使用此标头并处理来自服务器的响应并将已解析的对象传递给您的成功回调。