代码之家  ›  专栏  ›  技术社区  ›  Xodarap

空数组的ASP.NET MVC Int数组参数默认为{0}

  •  4
  • Xodarap  · 技术社区  · 14 年前

    Public ActionResult MyAction(int[] stuff){}
    

    我发出一个JSON请求,比如:

    $.getJSON(url, { stuff: [] })
    

    当它到达C#时,它看起来像一个数组,其中有一个元素,它是零(即,如果我这样做了 int[] stuff = {0}; ).

    这是MVC2的新版本还是.NET 4的新版本?最近好像变了,但我没有找到一把冒烟的枪。我怎么能避开这个?这不可能是预期的行为,不是吗?

    2 回复  |  直到 14 年前
        1
  •  2
  •   Xodarap    14 年前

    我认为这是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[]));
    

    // 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;
    

    它迫使 converted[0] 作为元素,ConvertSimpleType将“”强制转换为0。所以我要结束这个问题,除非有人有更多的信息。

        2
  •  0
  •   Darin Dimitrov    14 年前

    当我测试代码时 null 控制器操作中的数组,而不是包含一个元素的数组。

    在jquery 1.4和更高版本中,在AJAX请求期间序列化参数的方式已经改变,并且不再与默认的模型绑定器兼容。你可以设置 traditional 执行请求时的参数:

    $.getJSON(url, $.param({ stuff: [ 1, 2, 3 ] }, true));
    

    $.ajax({
        url: url,
        type: 'GET',
        dataType: 'JSON',
        data: { stuff: [ 1, 2, 3 ] },
        traditional: true,
        success: function(res) { }
    });