0

私はこのようなオブジェクトを持っています:

var lot = { ID: 0, ... //various other attributes
            SchemeInstanceList: [] }

作成後、SchemeInstanceList属性に次のような別の構造のオブジェクトを入力します。

lot.SchemeInstanceList.push({ ID: 0, LotID: 0, SchemeID: 18, LotPosition: 0})

ここまでは、すべて問題ありません。次に、lotオブジェクトをActionMethodに送信して、データベースエントリを作成します。

$.ajax({
    url: "/Lots/CreateSchemes",
    data: lot
});

public ActionResult CreateSchemes(LotModel lot) {
    ... //store lot in database
}

ActionMethodが呼び出され、lotの値が正しい場合、SchemeInstanceListにエントリがあります。ただし、これらのエントリの属性はすべてゼロであり、何が間違っているのかわかりません。

単一のリスト要素自体を渡すと、エントリは正しく表示されます。

$.ajax({
    url: "/Lots/CreateScheme",
    data: lot.SchemeInstanceList[0]
}

public ActionResult CreateScheme(SchemeInstanceModel scheme) {
   ... //do whatever
}

これで、SchemeID値は0ではなく18になります。

なぜこれが機能しないのですか?私が見逃している最も明白なことは何ですか?

編集:これが私のモデルです:

public class LotModel {
    public int ID { get; set; }
    ... //various other properties
    public List<SchemeInstanceModel> SchemeInstanceList { get; set; }
}

public class SchemeInstanceModel
{
    public int ID { get; set; }
    public int LotID { get; set; }
    public int SchemeID { get; set; }
    public int LotPosition { get; set; }

    //public List<AttributeInstanceModel> AttributeInstanceList { get; set; }
}
4

2 に答える 2

0

ここで解決策を見つけました:

https://stackoverflow.com/a/5373956/2139555

複雑なオブジェクトの json バインディングを機能させるには、JSON.stringify(lot)自分のデータとセットが必要contentType: "application/json, charset=utf-8"です。また、私は設定しませんでしtype: "Post"たが、それを試してみましたが、うまくいきませんでした。その上、ロットのデータを取得したので、問題ないと思いました。

完全な作業 json:

$.ajax({
    url: "/Lots/CreateSchemes",
    data: JSON.stringify(lot),
    type: "Post",
    dataType: "application/json, charset=utf-8"
});
于 2013-03-21T11:45:29.450 に答える
0

これを試して:

public ActionResult CreateSchemes(string lot) {
    LotModel li = JsonConvert.DeserializeObject<LotModel>(lot);
    ... //store lot in database
}

その文字列に必要な値が含まれているかどうかを確認してください...

また、LotModel に List プロパティがあることを確認してください。

私の推測では、渡される文字列に値が含まれている場合、JavaScript LotModel は C# LotModel と一致しません。モデルのプロパティ名は、javascript でも C# とまったく同じである必要があり、大文字である必要があります。

于 2013-03-20T19:44:46.160 に答える