Question

Cette question est liée à la ce .

J'utilise ce qui suit pour extraire les attributs et les valeurs des éléments de sélection sur ma page:

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'
});

En fait, après que je reçois un tableau des objets représentant les attributs de mes boîtes de sélection, je veux convertir en une chaîne de données que je peux transmettre au serveur

// get data string for server
var data = $.toJSON(arr); 

Le retour JSON est:

[{"siteId":"2"},{"filterId":"2","factSheetPanelId":"2"}]

et je passe au serveur comme ceci:

$.get(url, data, function(result)
{
    // do stuff
}, "html");

Le code sur le serveur est mais il ne ramasse pas les valeurs et modèle de liaison est défaillant

public PartialViewResult PanelList(FactsheetPanel panel, Site site)
{
    // panel.FactsheetPanelId == 0. I would expect it to be 2
    // same for site.SiteId..
}

Quelqu'un peut-il voir anyting évidemment le problème?

Était-ce utile?

La solution

Ne pas passer JSON. jQuery passera simplement que le serveur, qui ne saura pas quoi faire avec elle, sauf si vous écrivez un liant de données JSON.

Au lieu de cela, passer un objet JavaScript. jQuery sérialise que dans les paramètres de chaîne de requête, qui fonctionnent correctement. Par exemple:.

var data = {
               panel: { filterId: "2", factSheetPanelId: "2" },
               site: { siteId: "2" }
           };

Autres conseils

Cela semble mal. Cela aurait aidé si vous avez aussi vos classes au courant FactsheetPanel et Site mais de toute façon, pour autant que je comprends, voici comment votre JSON devrait être après avoir les valeurs de vos éléments HTML et de les traiter.

{"site.siteId":"2", "panel.filterId":"2","panel.factSheetPanelId":"2"}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top