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

È stato utile?

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) {
    ...
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top