2011-07-17 10 views
7

jsonとjQuery .post関数を使用して、私たちのページからコントローラ(MVC 3)にオブジェクトのコレクションを送信しようとしています。以下は私たちのjsコードとコントローラとオブジェクトの定義です。

問題は、オブジェクトがコントローラに適切に送信されている間は、メンバ変数が設定されていないということです。 「Coord」リストには適切な数の「Coord」オブジェクトがありますが、各Coordオブジェクトのメンバ変数には、渡している値の代わりにゼロ(nullではない)が設定されています。スクリーンショットを参照してください:

我々の実装では?

ありがとうございます!

Coord1 = { "X": 100, "Y": 200 }; 
Coord2 = { "X": 300, "Y": 400 }; 

zoneData = { "Color": "#D8F834", "Name": "new zone", "Coords": [Coord1, Coord2] } 

$.post("/Demo/SaveZone", zoneData, function (resp) { 
    alert(resp); 
}, "json"); 





[HttpPost] 
public ActionResult SaveZone(ZoneViewModel zvm) 
{ 
    Zone z; 

    z = AutoMapper.Mapper.Map<ZoneViewModel, Zone>(zvm); 

    _db.Zone.Attach(z); 
    _db.SaveChanges(); 

    return View(); 
} 


public class ZoneViewModel 
{ 

    public int Id { get; set; } 
    public string Name { get; set; } 
    public string Color { get; set; } 

    public CoordViewModel[] Coords { get; set; } 

} 


public class CoordViewModel 
{ 
    public int Id { get; set; } 
    public int X { get; set; } 
    public int Y { get; set; } 

} 
+0

あなたは、MVCのソースをダウンロードして、それへのプロジェクト参照を追加しますデフォルトのモデルバインディングコードを踏んでいますか? – redsquare

+0

あなたはhttpsost本体をfirebug/fiddlerの中に表示することができます – redsquare

答えて

13

最も簡単にはJSONリクエストを使用することです(私はこれは暗闇の中でショットです認める):

var coord1 = { X: 100, Y: 200 }; 
var coord2 = { X: 300, Y: 400 }; 
var zoneData = { 
    Color: '#D8F834', 
    Name: 'new zone', 
    Coords: [ coord1, coord2 ] 
}; 

$.ajax({ 
    url: '/Demo/SaveZone', 
    type: 'POST', 
    contentType: 'application/json; charset=utf-8', 
    data: JSON.stringify(zoneData), 
    success: function(resp) { 
     alert(resp); 
    } 
}); 

JSON.stringifyメソッドは、JavaScriptオブジェクトをJSON文字列にシリアル化します。これは、現代的な方法として最新のブラウザに組み込まれています。この方法を持たないレガシーブラウザをサポートしたい場合は、ブラウザがネイティブにサポートしているかどうかをチェックし、そうでなければ実装を提供するjson2.jsスクリプトを含める必要があります。

今、すべてが正常にバインドする必要があります。

enter image description here

、ここでは、成功した要求は次のようになります方法は次のとおりです。

enter image description here

+0

私たちはこれを試してみました。それにはさまざまな調整がありますが、まだ運がありません。これらの.Xと.Yの値は0としてポストされ続けます。 –

+1

@Ben Finkel、あなたは私の答えに示されているように**全く同じコード**を使用しましたか?私はちょうど私のコンピュータ上でそれをテストしたので、それは素晴らしい仕事をした。あなたはそれがうまくいかないと言っているので、あなたは私に非常に驚きます。 –

+0

あなたはあなたのスクリーンを見て、混乱しています。私はあなたのコードをカットアンドペーストして運がなかった。まだ同じ問題です。 –

0

enter image description here

私の推測:

public List<CoordViewModel> Coords { get; set; } 

おそらく

+0

いい考えですが、運はありません。ありがとう! –

+0

私の答えが変わった...リストオブジェクトを使ってみましたか? –

+0

ICollectionを試してみましたが、Listは試していませんでした。どちらもうまくいきませんでした。 –