Modell Binden an eine Liste <>, wenn Posting JavaScript Data Object
-
18-09-2019 - |
Frage
Ich versuche, ein JavaScript-Datenobjekt mit dem folgenden schreiben:
$.post(frm.attr("action"), data, function(res)
{
// do some stuff
}, "json");
Dabei steht 'Daten', die die Struktur nimmt
data
- panelId
- siteId
- ConfiguredFactsheetId // this is an array of CheckBox ids that correspond to ConfiguredFactsheets
- 123
- 234
- 345
Damit beide Website & Panel richtig instanziiert & gebunden mit ihren Daten, aber das List-Objekt ist null.
public JsonResult Edit(Site site, Panel panel, List<ConfiguredFactsheet> configuredFactsheets)
{
// do stuff
return Json(success);
}
Jetzt merke ich, dass meine ‚Daten‘ des Objekts ConfiguredFactsheetId Eigenschaft nur ein Array von ID-Werten ist. Muss ich festlegen, dass jeder Wert auf eine configuredFactsheetId Eigenschaft meiner ConfiguredFactsheet Objekt entspricht? Wenn ja, würde mein Datenobjekt ein Formular similart zu
data
- panelId
- siteId
- ConfiguredFactsheet // this is an array of CheckBox ids that correspond to ConfiguredFactsheets
- ConfiguredFactsheetId:123
- ConfiguredFactsheetId:234
- ConfiguredFactsheetId:345
, aber das wird natürlich nicht funktionieren, weil jedes Mal, wenn ich ein neues ConfiguredFactsheetId zum Objekt hinzufügen, wird es nur die vorherige überschreibt.
Ich weiß, ich kann dies tun, wenn ich einen Abfrage-String der Form gebaut
"&ConfiguredFactsheet[i].configuredFactsheetId = " + configuredFactsheetId;
, aber ich möchte alles in einem einzigen Datenobjekt enthalten
Irgendwelche Vorschläge? Muss ich etwas erklären (wahrscheinlich alles!) Deutlicher?
Danke
Dave
Lösung
Am Ende dieser gearbeitet:
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");
});
Hinweis: Lesen Sie über $ .getAttributes
Andere Tipps
Eine Alternative ist, zu schreiben:
?myValues=1&myValues=2&myValues=3
Und akzeptieren es als IEnumerable
public ActionResult DoSomething(IEnumerable<int> myValues) {
...