2013-04-29 78 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。