How to post an empty array (of ints) (jQuery -> MVC 3)
Using jQuery I am posting an array of int
to my 开发者_StackOverflowMVC 3 application by putting the array in the data parameter like so: data: { myIntArray: myIntArray }
. In my controller, the receiving action has as a parameter int[] myIntArray
.
This goes well in most cases, except when myIntArray
is empty. In the request I see the following myIntArray=
(note that there is no space after "="). Back in my MVC 3 controller this gets translated to an array containing one int
: 0.
It doesn't seem to me like I am doing something terribly wrong here by posting an empty array. I can work around this by handling the case where the array is empty in a different way. Nevertheless, I feel that this should be possible.
Thanks in advance.
Extra info:
- I use jQuery 1.5.1 (cannot upgrade for this project).
myIntArray
is initialized withnew Array()
.
You could do this:
var myIntArray = new Array();
// add elements or leave empty
myIntArray.push(1);
myIntArray.push(5);
var data = myIntArray.length > 0 ? { myIntArray: myIntArray } : null;
$.ajax({
url: '@Url.Action("someAction")',
type: 'POST',
data: data,
traditional: true,
success: function (result) {
console.log(result);
}
});
or use a JSON request:
var myIntArray = new Array();
// add elements or leave empty
myIntArray.push(1);
myIntArray.push(5);
$.ajax({
url: '@Url.Action("someAction")',
type: 'POST',
data: JSON.stringify(myIntArray),
contentType: 'application/json',
success: function (result) {
console.log(result);
}
});
Just in case anyone lands on this question trying to resolve this...
This is a bug in MVC (that still exists in MVC 4 in 2019, duh):
- when you
POST
an empty form parameter into an action method that has an array-mapped variable or model - this results in an 1-element zero array{ 0 }
.
I found no other way than to deal with it on the back-end.
Here's another question discussing it: ASP.NET MVC Int Array parameter with empty array defaults to {0}
精彩评论