Il legame del modello non riesce quando passo JSON tramite $ .get ()
-
24-09-2019 - |
Domanda
Questa domanda è legata al file questo.
Sto usando quanto segue per estrarre gli attributi e i valori dagli elementi selezionati sulla mia pagina:
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'
});
Fondamentalmente, dopo aver ottenuto un array di oggetti che rappresentano gli attributi delle mie caselle di selezione, voglio convertirlo in una stringa di dati che posso passare al server
// get data string for server
var data = $.toJSON(arr);
Il JSON è tornato è:
[{"siteId":"2"},{"filterId":"2","factSheetPanelId":"2"}]
E lo passo al server in questo modo:
$.get(url, data, function(result)
{
// do stuff
}, "html");
Il codice sul server è ma non sta raccogliendo i valori e l'associazione del modello non riesce
public PartialViewResult PanelList(FactsheetPanel panel, Site site)
{
// panel.FactsheetPanelId == 0. I would expect it to be 2
// same for site.SiteId..
}
Qualcuno può vedere qualcosa ovviamente sbagliato in questo?
Soluzione
Non passare Json. JQuery lo passerà semplicemente al server, il che non saprà cosa farne a meno che tu non scriva un raccoglitore di dati JSON.
Invece, passa un oggetto JavaScript. JQuery lo serializzerà nei parametri della stringa di query, che funzionano correttamente. Per esempio:
var data = {
panel: { filterId: "2", factSheetPanelId: "2" },
site: { siteId: "2" }
};
Altri suggerimenti
Sembra sbagliato. Avrebbe aiutato se avessi anche pubblicato il tuo FactsheetPanel
e Site
Classi ma comunque, per quanto ho capito, ecco come dovrebbe essere il tuo JSON dopo aver ottenuto i valori dai tuoi elementi HTML e elaborato.
{"site.siteId":"2", "panel.filterId":"2","panel.factSheetPanelId":"2"}