Pregunta

Estoy tratando de colocar un objeto de datos JavaScript con lo siguiente:

$.post(frm.attr("action"), data, function(res)
{
    // do some stuff
}, "json");

donde 'datos' toma la estructura de

data
 - panelId
 - siteId
 - ConfiguredFactsheetId // this is an array of CheckBox ids that correspond to ConfiguredFactsheets
   - 123
   - 234
   - 345

Con esto, tanto el sitio y el panel se instancian correctamente y unidos con sus datos, pero el objeto de lista es nula.

public JsonResult Edit(Site site, Panel panel, List<ConfiguredFactsheet> configuredFactsheets)
{
    // do stuff
    return Json(success);
}

Ahora, me doy cuenta de que la propiedad del objeto ConfiguredFactsheetId mis 'datos' es simplemente un conjunto de valores de id. ¿Es necesario especificar que cada valor corresponde a una propiedad configuredFactsheetId de mi objeto ConfiguredFactsheet? Si es así, mi objeto de datos tomaría 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

pero esto obviamente no va a funcionar porque cada vez que agrego un nuevo ConfiguredFactsheetId al objeto, sólo se va a sobrescribir la anterior.

Sé que puedo hacer esto si he construido una cadena de consulta de la forma

"&ConfiguredFactsheet[i].configuredFactsheetId = " + configuredFactsheetId;

pero me gustaría para contener todo en un solo objeto de datos

¿Alguna sugerencia? ¿Es necesario explicar nada (probablemente todo!) Con mayor claridad?

Gracias

David

¿Fue útil?

Solución

Al final, esto funcionó:

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: leer sobre $ .getAttributes

Otros consejos

Una alternativa es colocar:

?myValues=1&myValues=2&myValues=3

Y aceptarlo como un IEnumerable

public ActionResult DoSomething(IEnumerable<int> myValues) {
    ...
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top