2010-06-01 6 views
0

Celui-ci me semble douloureusement évident, mais pour une raison quelconque je ne peux pas le faire fonctionner comme je le veux. Peut-être que ce n'est pas possible comme je le fais, mais cela semble improbable. Cette question peut être quelque peu liée: ASP.NET MVC Model Binding Related Entities on Same Page.ASP.NET MVC - Liaison d'une entité enfant au modèle

J'ai un EditorTemplate pour éditer une entité avec plusieurs références d'entités associées. Lorsque l'éditeur est rendu, l'utilisateur reçoit une liste déroulante pour sélectionner les entités connexes, avec la liste déroulante renvoyant un ID comme valeur.

<%=Html.DropDownListFor(m => m.Entity.ID, ...)%> 

Lorsque la demande est envoyée la valeur de formulaire est nommé comme prévu: « Entity.ID », mais mon modèle fortement typé défini comme un paramètre d'action ne sont pas Entity.ID avec la valeur passée dans la demande.

public ActionResult AddEntity(EntityWithChildEntities entityWithChildEntities) { } 

J'ai essayé bidouiller avec Bind() attribut et spécifié Bind(Include = "Entity.ID") sur les entityWithChildEntities, mais cela ne semble pas fonctionner. J'ai également essayé Bind(Include = "Entity"), mais cela a entraîné le ModelBinder essayant de lier une définition "Entité" complète (sans surprise).

Est-il possible d'obtenir le classeur par défaut pour remplir l'ID d'entité enfant ou dois-je ajouter des paramètres d'action pour l'ID de chaque entité enfant, puis copier manuellement les valeurs dans la définition du modèle?

+0

La propriété 'Entity' a-t-elle un modificateur d'accès autre que public? comme ça; 'public HomeTestModelChild Child {get; ensemble interne; } ' – cem

+0

Non monsieur, tout est public. –

Répondre

1

Avez-vous regardé AutoMapper? Je suis d'accord que ceci ne devrait pas être exigé parce que la liaison devrait fonctionner mais ...

J'ai eu un peu de difficulté avec l'aide Html.XYZFor et suis revenue à l'utilisation de la notation MVC 1.1 et tout fonctionne.

+0

Je n'ai pas encore vérifié AutoMapper. Il a été sur le to-do pendant un moment. –

0

Il n'existe pas de méthode d'assistance DropDownListFor qui prend un paramètre. La méthode DropDownListFor norme prend au moins deux paramètres: le premier est un lambda utilisé pour calculer le nom de la sélection et le second est un IEnumerable<SelectListItem>:

<%= Html.DropDownListFor(m => m.Entity.ID, Model.EntitiesList) %> 

également comment le type EntityWithChildEntities ressemble? Il doit ressembler à ceci:

public class EntityType 
{ 
    public string ID { get; set; } 
} 

public class EntityWithChildEntities 
{ 
    public EntityType Entity { get; set; } 

    public IEnumerable<SelectListItem> EntitiesList 
    { 
     get 
     { 
      return new[] 
      { 
       new SelectListItem { Value = "1", Text = "foo" }, 
       new SelectListItem { Value = "2", Text = "bar" }, 
      } 
     } 
    } 
} 
+0

J'apprécie la réponse mais mon pseudo-code n'était pas destiné à être interprété littéralement. Du point de vue de la mise en œuvre, tout est correctement construit; le problème est que malgré la réception des valeurs correctement nommées dans le formulaire, les entités enfants du modèle ne sont pas remplies. En d'autres termes, les noms et les valeurs des champs de formulaire sont corrects, mais la sortie du modèle n'est pas conforme aux attentes. –

Questions connexes