2017-01-14 1 views
0

je dois suivant la hiérarchie des classes:modèle de conception: comment passer l'objet parent ID pour former des HttpPost en train de traiter

public class Parent 
{ 
    public int ID {get;set;} 
    public string SomeOtherProperty {get;set;} 
    ... 
    public virtual ICollection<Child> Children {get;set;} 
} 

public class Child 
{ 
    public int ID {get;set;} 
    public string SomeChildProperty {get;set;} 
    ... 
    public virtual Parent Parent {get;set;} 
} 

pubic class ViewModel 
{ 
    public ICollection<Parent> Parents {get; set;} 
    public NewChildVM ChildToAdd {get;set} 

} 

public class NewChildVM 
{ 
    public int ParentID {get; set;} 
    public string SomeChildProperty {get; set;} 
} 

Essentiellement ViewModel est une collection d'objets de parents, dont chacun a une collection d'objets enfants . Je veux également passer un objet enfant proxy qui sera utilisé pour remplir un formulaire dans la vue. La vue parcourt les objets Parent, avec des détails d'en-tête, puis affiche le formulaire à saisir, puis affiche une liste des objets enfants pour le parent.

foreach(Parent Prnt in Parents) 
{ 
    @Html.BeginForm() 
    { 
    <fieldset> 
     <legend>new message:</legend> 
     @Html.LabelFor(x => x.ChildToAdd.SomeChildProperty) 
     @Html.EditorFor(x => x.ChildToAdd.SomeChildProperty) 
     @Html.HiddenFor(x => x.ChildToAdd.ParentID, new { Value = Prnt.ID.ToString() }) 
    </fieldset> 
    <input type="submit" value="SEND"/> 

    } 
    foreach(Child Chld in Prnt.Children) 
    { 
     ... do the html for the child listing 
    } 
} 

J'ai du mal à obtenir le ParentID à remplir dans le formulaire. En utilisant @ Html.HiddenFor je ne peux pas remplir l'attribut 'value' (peut remplir 'Value') mais cela n'est pas relu automatiquement quand je passe le NewChildVM dans la version HttpPost de la méthode.

Je pense qu'il y a deux façons d'aborder cela, La première est la façon dont je suis (j'essaie) de le faire là où il y a une copie de NewChildVM dans le VM - auquel cas comment peupler le 'value' dans le formulaire dans la vue actuelle. L'autre manière serait de créer un ParentVM qui hérite de Parent et déplacez le NewChildVM pour qu'il soit une propriété dans ParentVM ce qui signifie que l'un est associé à l'instance du Parent qui ne me semble pas juste; mais si c'est le moyen de l'approcher, comment peupler le NewChildVM.ParentID avec le ParentVM.ID dans le ViewModel?

Répondre

0

Après avoir posté une question légèrement différente qui a fait obtenir une réponse, à la fin j'ai remplacé le HiddenFor avec une fabrication artisanale

<input type="hidden" value="Prnt.ID.ToString()" name="ChildToAdd.ParentID"/> 

et dans le ActionResult décoré [HttpPost] définir la liaison à la ChildToAdd élément de la vm

public ActionResult Conversations([Bind(Prefix="ChildToAdd")] Child vm) 

J'espère que cela aide quelqu'un d'autre.