A ligação do modelo está falhando quando passo JSON via $ .get ()
-
24-09-2019 - |
Pergunta
Esta questão está relacionada ao isto.
Estou usando o seguinte para extrair os atributos e valores dos elementos selecionados na minha página:
var valuesArray = $("select").map(function()
{
return $.getAttributes($(this).find(":selected"));
});
var arr = new Array();
$.each(valuesArray, function()
{
arr.push($(this)[0]); // this filters out things like 'length'
});
Basicamente, depois de receber uma matriz dos objetos representando os atributos das minhas caixas selecionadas, quero convertê -lo em uma sequência de dados que eu possa passar para o servidor
// get data string for server
var data = $.toJSON(arr);
O JSON retornou é:
[{"siteId":"2"},{"filterId":"2","factSheetPanelId":"2"}]
E eu passo para o servidor assim:
$.get(url, data, function(result)
{
// do stuff
}, "html");
O código no servidor é, mas não está captando os valores e a ligação do modelo está falhando
public PartialViewResult PanelList(FactsheetPanel panel, Site site)
{
// panel.FactsheetPanelId == 0. I would expect it to be 2
// same for site.SiteId..
}
Alguém pode ver qualquer coisa obviamente errada com isso?
Solução
Não passe JSON. O jQuery simplesmente passará isso para o servidor, que não saberá o que fazer com ele, a menos que você escreva um fichário de dados JSON.
Em vez disso, passe um objeto JavaScript. O jQuery serializará serializando isso nos parâmetros de sequência de consultas, que funcionam corretamente. Por exemplo:
var data = {
panel: { filterId: "2", factSheetPanelId: "2" },
site: { siteId: "2" }
};
Outras dicas
Isso parece errado. Teria ajudado se você também postou seu FactsheetPanel
e Site
Aulas, mas de qualquer maneira, até onde eu entendo, eis como o seu JSON deve ser depois de obter os valores dos seus elementos HTML e processá -los.
{"site.siteId":"2", "panel.filterId":"2","panel.factSheetPanelId":"2"}