À l'aide de [FromUri] l'attribut bind objet complexe avec un tableau imbriqué

Je veux envoyer un objet complexe avec un tableau imbriqué dans l'uri à un MVC méthode d'action dans une requête GET.

Considérons le code suivant:

 public ActionResult AutoCompleteHandler([FromUri]PartsQuery partsQuery){ ... }

 public class PartsQuery
 {
     public Part[] Parts {get; set; }
     public string LastKey { get; set; }
     public string Term { get; set; }
 }

 $.ajax({ 
    url: "Controller/AutoCompleteHandler", 
    data: $.param({                                        
                      Parts: [{ hasLabel: "label", hasType: "type", hasIndex : 1 }],
                      LastKey : "Last Key",
                      Term : "Term"                             
                   }),
    dataType: "json", 
    success: function(jsonData) { ... }
 });

Cela fonctionne bien et se lie correctement en utilisant le modèle de classeur par défaut en MVC, Web Api.

Cependant, ce commutateur à la plaine de MVC n'est pas WebApi et le modèle de classeur par défaut tombe en panne et ne peut pas lier les propriétés sur les objets dans le tableau imbriqué:

Liste De Surveillance

partsQuery      != null          //Good
--LastKey       == "Last Key"    //Good
--Term          == "Term"        //Good
--Parts[]       != null          //Good
----hasLabel    == null          //Failed to bind
----hasType     == null          //Failed to bind
----hasIndex    == 0             //Failed to bind

Je voudrais savoir pourquoi cela se décompose en plaine MVC et comment faire FromUriAttribute lier cet objet correctement dans la plaine MVC

Qu'advient-il si vous changez Part[] Parts à ICollection<Part> Parts? Et pouvez-vous afficher la définition de classe pour Part?
Essayez-les maintenant. Le cadre est simple POCO avec le public { get; set; } accessoires
Ne Part avoir un constructeur sans paramètre?
ICollection n'a pas de résoudre le problème de liaison. Il ne disposait pas d'avoir un constructeur sans paramètre, mais j'ai juste essayé avec un et toujours pas aller (essayé avec ICollection).
Est-ce appel Ajax encore nécessaires pour être un Get?

OriginalL'auteur parliament | 2013-07-10