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

Foi útil?

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) {
    ...
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top