格式化JSon以便mvc4控制器方法可以解析它

时间:2013-10-28 18:15:46

标签: javascript json asp.net-mvc-4

我的控制器动作:

       [HttpPost]
        public ActionResult H80Count(IEnumerable<H80SearchCriteria> model)
        {
             do some stuff and return Json;
        }

我的模特:

    public class H80SearchCriteria
    {
        public int ID { get; set; }
        public int Operator { get; set; }
        public string FieldID { get; set; }
        public string Kriterie { get; set; }

    }

我的Javascript:

    var SearchCriteria = [];
    var i = 0;
    $('#tableSearchValues > tbody').find('tr').each(function () {
        i += 1;

        var row = {
            ID : i,
            Operator : $(this).data('operator'),
            FieldID : $(this).data('fieldid'),
            Kriterie: $(this).data('kriterie')
        };

        SearchCriteria.push(row);
    });
    var url = '/MyController/H80Count';
    var data = JSON.stringify(SearchCriteria) ;

    $.ajax({
        type: 'POST',
        url: url,
        data: data,
    etc...

传递的Json看起来像这样:

[{"ID":1,"Operator":1,"FieldID":1,"Kriterie":11211},{"ID":2,"Operator":1,"FieldID":1,"Kriterie":11211}]

我看不出为什么它没有被正确解析。我错过了什么?

2 个答案:

答案 0 :(得分:1)

我想你忘记了ajax函数的contentType: 'application/json'

它对我有用。

答案 1 :(得分:0)

尝试使用此代替IEnumerable使用数组并放置[FromUri][FromBody],以查找请求的Uri或Body中的值。

    [HttpPost]
    public ActionResult H80Count([FromUri] H80SearchCriteria[] model)
    {
         do some stuff and return Json;
    }

并且不要忘记将传统的ajax设置设置为true

$.ajax({
        type: 'POST',
        url: url,
        data: data,
        traditional: true
        });