1

次のJavaScriptデータオブジェクトを投稿しようとしています:

$.post(frm.attr("action"), data, function(res)
{
    // do some stuff
}, "json");

ここで、「データ」は次の構造を取ります

data
 - panelId
 - siteId
 - ConfiguredFactsheetId // this is an array of CheckBox ids that correspond to ConfiguredFactsheets
   - 123
   - 234
   - 345

これにより、サイトとパネルの両方が正しくインスタンス化され、データにバインドされますが、List オブジェクトは null です。

public JsonResult Edit(Site site, Panel panel, List<ConfiguredFactsheet> configuredFactsheets)
{
    // do stuff
    return Json(success);
}

ここで、「データ」オブジェクトの ConfiguredFactsheetId プロパティが id 値の単なる配列であることに気付きました。各値が ConfiguredFactsheet オブジェクトの configuredFactsheetId プロパティに対応することを指定する必要がありますか? もしそうなら、私のデータオブジェクトは似たような形をとるでしょう

data
 - panelId
 - siteId
 - ConfiguredFactsheet // this is an array of CheckBox ids that correspond to ConfiguredFactsheets
   - ConfiguredFactsheetId:123
   - ConfiguredFactsheetId:234
   - ConfiguredFactsheetId:345

しかし、オブジェクトに新しい ConfiguredFactsheetId を追加するたびに、以前のものを上書きするだけなので、これは明らかに機能しません。

次の形式のクエリ文字列を作成すれば、これを実行できることがわかります

"&ConfiguredFactsheet[i].configuredFactsheetId = " + configuredFactsheetId;

しかし、すべてを単一のデータオブジェクトに含めたい

助言がありますか?何か (おそらくすべて!) をもっと明確に説明する必要がありますか?

ありがとう

デイブ

4

2 に答える 2

1

最終的に、これはうまくいきました:

var valuesArray = objCheckBoxes.map(function()
{
    return $.getAttributes($(this));
});

var obj = new Array();
$.each(valuesArray, function(item) { obj.push($(this)[0]); });

$.each(obj, function(i)
{
    // basically I take the rule where you need to append
    // the index to the type, and I apply it here.
    data["configuredFactsheets[" + i + "].configuredFactsheetId"] = $(this).attr("configuredFactsheetId");
});

注: $.getAttributesについてお読みください

于 2010-03-08T17:07:53.617 に答える
0

別の方法は、投稿することです:

?myValues=1&myValues=2&myValues=3

そしてそれをIEnumerableとして受け入れます

public ActionResult DoSomething(IEnumerable<int> myValues) {
    ...
于 2010-03-08T15:59:38.243 に答える