2016-05-11 10 views
0

いくつかのプロパティと配列を持つオブジェクトをポストしようとしています。 プロパティは正しく送信されますが、オブジェクト内の配列はMVC.NETコントローラでシリアル化されません。 この例では、ページは正しくマップされていますが、アレイオブジェクト(場所)はコントローラでは常にnullです。 提案がありますか?アレイ内の配列を持つ角度のあるポストオブジェクト

//add some data 
$scope.formData = { 
Page: 1, 
Locations: [] 
}; 
$scope.formData.Locations.push({ 
LocationID: 1, 
LocationType: 1 
}); 
$scope.formData.Locations.push({ 
LocationID: 2, 
LocationType: 2 
}); 

//post method 
$http({ 
method: 'POST', 
url: 'myurl', 
params: $scope.formData, 
}).then(function successCallback(
response) { 
//do something 
}, function errorCallback(response) { 
//do something 

}); 

サーバー側モデル

public class SearchAuctionData 
{  
    public int Page { get; set; } 
    public List<SmallLocation> Locations { get; set; } 
} 

public class SmallLocation 
{ 
    public short LocationID { get; set; } 
    public short LocationType { get; set; } 
} 

コントローラ

[HttpPost] 
[AllowAnonymous] 
public async Task<JsonResult> GetAuctions(SearchAuctionData data) 
{ 
//do somethng 
    return Json(result); 
} 

答えて

1

この:、さらに良い

$http({ 
method: 'POST', 
url: 'myurl', 
data: $scope.formData, 

サービス(コントローラにそれを注入することを確認してください)を使用します:

$http({ 
method: 'POST', 
url: 'myurl', 
params: $scope.formData, 

があるべきインサイド

app.factory("MyService", ["$http", function($http){ 
    return { 
     postItem: function(url, item) { 
      return $http({ 
       url: url, 
       method: 'POST', 
       data: item 
      }); 
     } 
    } 
}]); 

をコントローラー

MyService.postItem('/path/to/c#/controller', $scope.formData).then(successCallback).catch(failureCallback); 
+0

私はどのような見落とし:D。 paramsをデータに置き換え、すべて正常に動作します。 ありがとう – Robert

0

あなたは "コントローラでnull" とはどういう意味ですか?

あなたのPOSTリクエスト後に?

POSTコールの前に$scope.formData.Locationsを印刷すると、それはnullですか?

+0

サーバーのLocationsオブジェクトのコントローラには、常にnullがあります。 私のモデルのルートプロパティのみをマッピングしますが、配列はマッピングしません。私は私の質問にサーバー側のコードを追加しました。 – Robert

+1

@KKKKKKKKがあなたの問題を発見しました。私がすでに行ったように間違いを無駄にしないように、POSTには 'data'が必要ですが、GETには' params'が必要です。 –

+0

ありがとう、いいことを知って:) – Robert

関連する問題