2013-04-29 4 views
0

У меня есть служебный вызов, который получает отфильтрованный набор исторических записей из нашей базы данных.Передача сложного объекта в MVC api равна нулю

У меня возникли проблемы с подключением моего фильтра к моему основному вызову mvc.

[AcceptVerbs("POST")] 
public History History(HistoryFilters filters){......} 

config.Routes.MapHttpRoute(
    name: "DefaultActionRoute", 
    routeTemplate: "api/{controller}/{action}/{id}", 
    defaults: new {id = RouteParameter.Optional} 
); 

amplify.request.define('post', 'ajax', { 
    url: '/api/{controller}/{action}', 
    dataType: 'json', 
    type: 'POST', 
    cache: cache 
}); 

//History Filter js 
{ 
    DateRange: { Start: ..., End: ...}, 
    BetStatus: "unresolved", 
    TransactionTypes: "bets" 
} 

Каждый раз, когда я устанавливаю фильтры вызовов, заполняются нулевыми значениями. Структура фильтра JS соответствует структуре моего класса HistoryFilters в C#. Если я JSON.stringify мои фильтры и изменю свой вызов Api на строку, тогда я получаю это, но было бы неплохо, если бы оно могло преобразовать его для меня.

Может ли кто-нибудь сказать мне, что мне не хватает?

Редактировать

var amp = function(id, data) { 
    return $.Deferred(function(dfd) { 
     amplify.request({ 
      resourceId: id, 
      data: data, 
      success: dfd.resolve, 
      error: dfd.reject 
     }); 
    }).promise(); 
}; 

History: function (filters) { 
     return amp('post', { controller: 'user', action: 'history', '':filters}); 
    } 


public class HistoryFilters 
{ 
    public DateFilter DateRange { get; set; } 
    public string BetStatus { get; set; } 
    public string TransactionTypes { get; set; } 
} 

public class DateFilter 
{ 
    public string Start { get; set; } 
    public string End { get; set; } 
} 
+0

Предоставьте определение «HistoryFilters» и код «amplify.request()». вероятное решение 1. добавьте параметр «contentType:« application/json »в« amplify.request.define ». 2. Отправьте строковые данные «JSON.stringify (historyFilters)» в параметр данных. – shakib

ответ

0

Это мое понимание того, что AmplifyJS имеет проблемы с установкой CONTENTTYPE и поэтому не может сделать этот тип вызова. Я удалил вызов amplifyJS, и я использую только jquery.

Смежные вопросы