Modelo unen a una lista de <> al publicar JavaScript Object Data
-
18-09-2019 - |
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
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) {
...