我正在尝试使用以下内容发布JavaScript数据对象:
$.post(frm.attr("action"), data, function(res)
{
// do some stuff
}, "json");
其中'data'采用
的结构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);
}
现在,我意识到我的'data'对象的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;
但我想在一个数据对象中包含所有内容
有什么建议吗?我是否需要更清楚地解释任何事情(可能是一切!)?
由于
戴夫
答案 0 :(得分: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
答案 1 :(得分:0)
另一种方法是发布:
?myValues=1&myValues=2&myValues=3
并接受它作为IEnumerable
public ActionResult DoSomething(IEnumerable<int> myValues) {
...