如何发送一个int的列表与jQuery到ASP.net MVC默认模型绑定

前端之家收集整理的这篇文章主要介绍了如何发送一个int的列表与jQuery到ASP.net MVC默认模型绑定前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
当我发送一个int的列表与jQuery像这样:
$.ajax('@Url.Action("Execute")',{
    type: 'POST',data: {
        pkList: [1,2,3]
    }
});

那么jQuery将转换pkList对象并通过post这样发送:

pkList[]:1
pkList[]:2
pkList[]:3

如果服务器是PHP但是我使用Asp.NET MVC3并尝试使用默认模型绑定器来获取这些值,那将是很好的:

public ActionResult Execute(ICollection<int> pkList)

但是pkList总是为空,似乎默认的模型binder不能绑定它.

如何正确解决

添加解决方

我使用Darin Dimitrov的解决方案,在jQuery中设置了传统的选项:

$.ajax('@Url.Action("Execute")',traditional: true,3]
    }
});

现在jQuery没有添加[]到参数,它们是这样发送的:

pkList:1
pkList:2
pkList:3

并且MVC默认模型绑定器正确地获取值.

希望这有助于某人.

解决方法

您可以使用JSON请求,因为它将允许您发送任何您想要的复杂对象:
$.ajax({
    url: '@Url.Action("Execute")',type: 'POST',contentType: 'application/json; charset=utf-8',data: JSON.stringify({ pkList: [1,3] }),// you could throw any javascript object you like here
    success: function(result) {
        // process the results
    }
});

JSON.stringify方法内置于现代浏览器中,如果要支持旧版浏览器,则可以将json2.js脚本包含在您的站点中.

为了回答您的问题,您可以使用传统的:true选项来指示jQuery从传统的参数序列化到后退,因为在jQuery 1.4中已经发生变化,如果您使用的是更高版本,则可以将其重新切换回参数序列化:

$.ajax({ 
    url: '@Url.Action("Execute")',3]
    },traditional: true
});

猜你在找的jQuery相关文章