2013-04-29 47 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过滤器结构与我在C#中的HistoryFilters类的结构相匹配。如果我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.在'amplify.request.define'中添加设置“contentType:'application/json'”。 2.在数据参数中发送字符串化数据'JSON.stringify(historyFilters)'。 – shakib 2013-04-30 06:02:44

回答

0

这是我的理解是AmplifyJS与设置的contentType的一个问题,因此不能使这种类型的呼叫。我现在删除了amplifyJS调用,并使用jquery。

相关问题