ASP.NET MVC отправка JSON данных в действие контроллера

Я пытаюсь отправить некоторые данные JSON в метод действия контроллера ASP.NET MVC3, но он не работает, что бы я ни делал.

Вот мой ajax вызов (он использует метод JSON.stringify из json2.js):

$.ajax({
        url: '/Home/GetData',
        type: "POST",
        dataType: "json",
        contentType: "application/json; charset=utf-8;",
        data: JSON.stringify(filters_data),
        success: function (data) {
            alert(data);
        }
    });

Fiddler показывает запрос так:

POST http://localhost:51492/Home/GetData HTTP/1.1
Host: localhost:51492
Connection: keep-alive
Content-Length: 171
Origin: http://localhost:51492
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.7 (KHTML, like Gecko)     Chrome/16.0.912.75 Safari/535.7
Content-Type: application/json; charset=UTF-8;
Accept: application/json, text/javascript, */*; q=0.01
Referer: http://localhost:51492/
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-GB,en-US;q=0.8,en;q=0.6
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3

{"Filters":[{"Field":3,"Operator":0,"Values":["30.01.2012.","30.01.2012."]},{"Field":2,"Operator":0,"Values":["-1"]},{"Field":0,"Operator":0,"Values":["some-string"]}]}

Мой c# код:

[HttpPost]
public string GetData(QueryFilters filters)
{
     return "Ho ho ho and a bottle of rum.";
}

[Serializable]
public enum Fields
{
        A,
        B,
        C,
        D
}

[Serializable]
public enum FilterOperator
{
    Is,
    Between,
    GreaterOrEqual,
}

[Serializable]
public class QueryFilter
{
    public Fields Field { get; set; }
    public FilterOperator Operator { get; set; }
    public List Values { get; set; }
}

[Serializable]
public class QueryFilters
{
    public List Filters { get; set; }
}

Я добавил следующую строку в метод Application_Start() в global.asax.cs:

ValueProviderFactories.Factories.Add(new JsonValueProviderFactory());

Точка останова в методе действия 'GetData' достигнута, но значение свойства Filters равно null. Есть идеи?

Еще одно замечание: я попробовал передать гораздо более простой объект: Person - свойства string Name и int Age, с тем же результатом - похоже, что автоматическое связывание модели не работает, но я не знаю, как это проверить.

6
задан skali 30 January 2012 в 12:55
поделиться