Modello legarsi ad un List <> durante la pubblicazione di dati oggetto JavaScript
-
18-09-2019 - |
Domanda
Sto cercando di inviare un oggetto di dati JavaScript con il seguente:
$.post(frm.attr("action"), data, function(res)
{
// do some stuff
}, "json");
dove 'dati' prende la struttura del
data
- panelId
- siteId
- ConfiguredFactsheetId // this is an array of CheckBox ids that correspond to ConfiguredFactsheets
- 123
- 234
- 345
Con questo, sia sito e pannello siano correttamente istanziato e legati con i loro dati, ma l'oggetto lista è nullo.
public JsonResult Edit(Site site, Panel panel, List<ConfiguredFactsheet> configuredFactsheets)
{
// do stuff
return Json(success);
}
Ora, mi rendo conto che la proprietà dell'oggetto ConfiguredFactsheetId i miei dati '' è solo un array di valori id. Devo specificare che ciascun valore corrisponde a una proprietà configuredFactsheetId del mio oggetto ConfiguredFactsheet? Se è così, il mio oggetto di dati avrebbe preso una forma similart a
data
- panelId
- siteId
- ConfiguredFactsheet // this is an array of CheckBox ids that correspond to ConfiguredFactsheets
- ConfiguredFactsheetId:123
- ConfiguredFactsheetId:234
- ConfiguredFactsheetId:345
, ma questo ovviamente non funzionerà perché ogni volta aggiungo un nuovo ConfiguredFactsheetId all'oggetto, sarà solo sovrascrivere quello precedente.
So che posso fare questo se ho costruito una stringa di query della forma
"&ConfiguredFactsheet[i].configuredFactsheetId = " + configuredFactsheetId;
ma mi piacerebbe per contenere tutto in un unico oggetto di dati
Qualche suggerimento? Ho bisogno di spiegare nulla (probabilmente tutto!) In modo più chiaro?
Grazie
Dave
Soluzione
Alla fine, questo ha funzionato:
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");
});
Nota: leggere su $ .getAttributes
Altri suggerimenti
In alternativa è possibile inviare:
?myValues=1&myValues=2&myValues=3
E accettarlo come un IEnumerable
public ActionResult DoSomething(IEnumerable<int> myValues) {
...