将复杂对象传递给MVC api为空
问题描述:
我有一个服务调用,它从我们的数据库中获取一组已过滤的历史记录。将复杂对象传递给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; }
}
答
这是我的理解是AmplifyJS与设置的contentType的一个问题,因此不能使这种类型的呼叫。我现在删除了amplifyJS调用,并使用jquery。
提供'HistoryFilters'定义和'amplify.request()'代码。可能的解决方案1.在'amplify.request.define'中添加设置“contentType:'application/json'”。 2.在数据参数中发送字符串化数据'JSON.stringify(historyFilters)'。 – shakib 2013-04-30 06:02:44