Question

Je suis en train d'afficher un objet de données JavaScript avec les éléments suivants:

$.post(frm.attr("action"), data, function(res)
{
    // do some stuff
}, "json");

où 'données' prend la structure

data
 - panelId
 - siteId
 - ConfiguredFactsheetId // this is an array of CheckBox ids that correspond to ConfiguredFactsheets
   - 123
   - 234
   - 345

Avec cela, deux sites et le panneau sont correctement instanciés et liés à leurs données, mais l'objet de la liste est nulle.

public JsonResult Edit(Site site, Panel panel, List<ConfiguredFactsheet> configuredFactsheets)
{
    // do stuff
    return Json(success);
}

Maintenant, je me rends compte que mes biens objet de « données » ConfiguredFactsheetId est juste un tableau de valeurs id. Ai-je besoin de préciser que chaque valeur correspond à une propriété configuredFactsheetId de mon objet ConfiguredFactsheet? Si oui, mon objet de données prendrait une forme similart à

data
 - panelId
 - siteId
 - ConfiguredFactsheet // this is an array of CheckBox ids that correspond to ConfiguredFactsheets
   - ConfiguredFactsheetId:123
   - ConfiguredFactsheetId:234
   - ConfiguredFactsheetId:345

mais évidemment ne fonctionnera pas parce que chaque fois que j'ajoute une nouvelle ConfiguredFactsheetId à l'objet, il vous reste plus qu'à remplacer le précédent.

Je sais que je peux le faire si je construit une chaîne de requête du formulaire

"&ConfiguredFactsheet[i].configuredFactsheetId = " + configuredFactsheetId;

mais je voudrais tout contenir en un seul objet de données

Toutes les suggestions? Ai-je besoin d'expliquer quoi que ce soit (probablement tout!) Plus clairement?

Merci

Dave

Était-ce utile?

La solution

En fin de compte, cela a fonctionné:

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

Note: lire $ .getAttributes

Autres conseils

Une alternative consiste à envoyer des messages:

?myValues=1&myValues=2&myValues=3

Et l'accepter comme un IEnumerable

public ActionResult DoSomething(IEnumerable<int> myValues) {
    ...
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top