传递int数组到MVC控制器
我有一个JavaScript函数,我传递了4个数组,其中每个数组都是 [1,2],只有int值或者[]里面没有值。这些被传递给Url.Action
命令。传递int数组到MVC控制器
function Filter(locations, machines, severities, messages) {
var url = '@Url.Action("Filter", "ActiveMessages")?' + $.param({
locations: locations, machines: machines, severities: severities, messages: messages });
$.ajax({
url: url,
method: 'POST',
traditional: true,
success: function (data) { }
});
}
我试着用$.param()
来构建参数。但是这并不能产生我期待的参数,我得到的是这样的:"/ActiveMessages/Filter?locations%5B%5D=1"
我也试着这样做:
decodeURIComponent($.param({ locations: filterlocations, machines: filtermachines, severities: filterseverities, messages: filtermessages }))
然后我得到的是这样的: "/ActiveMessages/Filter?locations[]=1&locations[]=2"
有没有其他方法可以将这样一个数组解析为一个url?
接收发生在控制器:
public async Task<ActionResult> Filter(int[] locations, int[] machines, int[] severities, int[] messages)
{
//TODO filter
}
调用此方法,但参数为null;
当我开始使用这个工作的单个值,但需要扩展到一个数组。
var url = '@Url.Action("Filter", "ActiveMessages")' + '?locations=' + locations + '&machines=' + machines + '&severities=' + severities + '&messages=' + messages;
最佳实践将是用身体来发送参数后(注paramters的[FromBody]注释):
[HttpPost]
public async Task<ActionResult> Filter([FromBody] int[] locations, [FromBody] int[] machines, [FromBody] int[] severities, [FromBody] int[] messages)
的参数需要在被指定Ajax调用的身体:
function Filter(locations, machines, severities, messages) {
var url = '@Url.Action("Filter", "ActiveMessages")';
$.ajax({
url: url,
method: 'POST',
data: JSON.stringify({ locations: locations, machines: machines, severities: severities, messages: messages }),
traditional: true,
success: function (data) {
}});
}
'[FromBody]'在这里是不必要的。该方法只允许POST,所以这个数据当然会来自post主体 –
我已经实现了这个,但我仍然在我的控制器中得到空值 –
我已经构建了如下数据:data:{'locations':locations,'machines ':machines,'severities':严重性,'messages':messages}如 - Ivan Franco所建议的那样。现在我在控制器中获取数据 –
var locations = [1,2];
var machines = [3,4];
var severities = [5,6];
var messages = [7,8];
$.ajax({
url: @Url.Action("Filter", "ActiveMessages"),
method: 'POST',
data: {
locations: locations,
machines: machines,
severities: severities,
messages: messages
},
success: function (data) {
}
});
在这种情况下,没有必要字符串化:)
你为什么要通过URL传递它们? –
你会推荐什么其他方式?我认为这将是最简单的方式,因为数据不是私人的 –
我建议将它们传递给AJAX POST,并在数据属性中包含所有数组。像这样的东西http://stackoverflow.com/a/5489534/6157222 –