Modelo ligam a um List <> ao postar Data Object JavaScript
-
18-09-2019 - |
Pergunta
Eu estou tentando postar um objeto de dados JavaScript com o seguinte:
$.post(frm.attr("action"), data, function(res)
{
// do some stuff
}, "json");
onde 'dados' leva a estrutura
data
- panelId
- siteId
- ConfiguredFactsheetId // this is an array of CheckBox ids that correspond to ConfiguredFactsheets
- 123
- 234
- 345
Com isso, tanto local e painel são instanciado corretamente e preso com os seus dados, mas o objeto de lista é nulo.
public JsonResult Edit(Site site, Panel panel, List<ConfiguredFactsheet> configuredFactsheets)
{
// do stuff
return Json(success);
}
Agora, percebo que ConfiguredFactsheetId propriedade do objeto meus 'dados' é apenas uma matriz de valores de identificação. Eu preciso especificar que cada valor corresponde a uma propriedade configuredFactsheetId do meu objeto ConfiguredFactsheet? Se assim for, o meu objeto de dados levaria uma forma similart para
data
- panelId
- siteId
- ConfiguredFactsheet // this is an array of CheckBox ids that correspond to ConfiguredFactsheets
- ConfiguredFactsheetId:123
- ConfiguredFactsheetId:234
- ConfiguredFactsheetId:345
mas isso obviamente não vai funcionar, porque cada vez que eu adicionar um novo ConfiguredFactsheetId ao objeto, ele só vai substituir a anterior.
Eu sei que posso fazer isso se eu construí uma string de consulta do formulário
"&ConfiguredFactsheet[i].configuredFactsheetId = " + configuredFactsheetId;
mas eu gostaria de conter tudo em um único objeto de dados
Todas as sugestões? Eu preciso explicar nada (provavelmente tudo!) De forma mais clara?
Graças
Dave
Solução
No final, isso funcionou:
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: ler sobre $ .getAttributes
Outras dicas
Uma alternativa é postar:
?myValues=1&myValues=2&myValues=3
E aceitá-la como um IEnumerable
public ActionResult DoSomething(IEnumerable<int> myValues) {
...