MVC - Créer un objet et des objets connexes en une seule fois
Je veux créer un objet parent avec enfant/objets liés dans la même vue.
Un exemple serait: créer un Père (nom) avec tous ses fils (avec leur nom). J'ai créé un modèle de vue:
public class FatherViewModel {
public Father father {get; set;} //has 1 property Name
public List<Son> {get; set;} //has 1 property Name
}
Ma question est, comment puis-je obtenir la liste des Fils de retour à partir de la vue lorsque le poste est-il effectué?
J'ai essayé d'utiliser HiddenFor pour chaque Fils de l'id, mais n'importe quoi, la liste est vide lorsqu'il est retourné à la manette.
Mise à JOUR:
J'ai essayé de l'Éditeur de Modèle par exemple par Shyju décrit ci-dessous, mais mon éditeur n'est jamais appelée.
J'ai 1 objet:
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
public int? FatherId { get; set; }
public virtual ICollection<Person> Children { get; set; }
}
Je l'ai fait:
- Échafaudée complet d'un contrôleur pour la Personne avec index, de créer, d'éditer...
- Créé EditorTemplates dossier en Vue->Personne
- Créée Personne.cshtml:
@model TestEditorTemplate.Models.Person
<div>
<h4>Child</h4>
@Html.TextBoxFor(s => s.Name)
@Html.HiddenFor(s => s.Id)
</div> - Ajouté
@Html.EditorFor(m => m.Children)
à Créer.cshtml
Questions:
- Comment peut -
@Html.EditorFor(m => m.Children)
éventuellement travailler avec le
l'éditeur de modèle lors de lam.Children
est une collection dePerson
et pas un seul
Person
? - Je veux créer (ne pas modifier) un père dont les enfants en même temps. Cela signifie que je n'ai pas d'Id pour passer à la vue de Créer au départ. Comment cela peut-il fonctionner? À partir de l'exemple par Shyju, les Identifiants sont déjà créés à l'avance?? Ou ai-je mal compris le exemple?
OriginalL'auteur SkeetSkeet | 2014-08-18
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser EditorTemplates pour gérer cela. Voici un échantillon de travail.
J'ai donc un viewmodel pour représenter la relation père-enfant
Et dans mes méthode d'action, j'ai créer un objet de mon point de vue, le modèle et la charge du Père -enfant données.
Maintenant, je vais créer un EditorTemplate. Pour ce faire, Allez dans votre dossier de Vues, et de Créer un répertoire appelé EditorTemplates sous le répertoire qui a le même nom que le contrôleur, et ajouter une vue avec le nom
PersonVM.cshtml
Maintenant, allez à ce point de vue et ajoutez le code ci-dessous.
Maintenant, nous allons revenir à notre vue principale. Nous devons faire de ce point de vue fortement typée à l'origine, notre
PersonVM
. Nous allons utiliser le EditorFor html helper dans ce point de vue à l'appel de notre éditeur de modèleOnt maintenant une HttpPost méthode dans le contrôleur pour gérer la publication de formulaires
Maintenant, Si vous placez un point d'arrêt dans votre HttpPost méthode d'action, vous pouvez voir l'identité de l'enfant sont transmis à cette méthode d'action.
Une chose importante à retenir est que Votre Éditeur de Template de vue du nom doit être le même que le type de liaison.
Une grande réponse, mais j'ai quelques questions supplémentaires. Auriez-vous l'esprit de partage de votre projet? Consultez révisé à la question.
J'ai besoin d'ajouter un
HiddenFor
à la ParentId dans le modèle d'édition pour faire ce travail : @Html.HiddenFor(s => s.ParentId)Alors, comment puis-je ajouter de nouvelles entrées? Est-il possible d'écrire un modèle pour
ICollection<PersonVM>
?OriginalL'auteur Shyju