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?

È stato utile?

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"}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top