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

War es hilfreich?

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) {
    ...
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top