I have a controller action like:
Public ActionResult MyAction(int[] stuff){}
I make a JSON request like:
$.getJSON(url, { stuff: [] })
When it gets to C# it looks like an array with one element in it, which is zero (i.e. like if I did int[] stuff = {0};
).
Is this new with MVC 2 or .NET 4? It seems to have changed recently, but I haven't found a smoking gun. How can I get around this? This can't possibly be expected behavior, can it?
I think this is a bug in MVC:
// create a vpr with raw value and attempted value of empty string
ValueProviderResult r = new ValueProviderResult("", "", System.Globalization.CultureInfo.CurrentCulture);
// this next line returns {0}
r.ConvertTo(typeof(int[]));
If we look at ValueProviderResult.cs in function UnwrapPossibleArrayType, we see:
// case 2: destination type is array but source is single element, so wrap element in array + convert
object element = ConvertSimpleType(culture, value, destinationElementType);
IList converted = Array.CreateInstance(destinationElementType, 1);
converted[0] = element;
return converted;
It forces converted[0]
to be element, and ConvertSimpleType casts "" to 0. So I'm closing this question, unless someone has more info.
EDIT: Also, this is not in revision 17270, so if you're making a list of things which change from MVC 1 to MVC 2, this is one of them.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With