Créer un nouveau parent et un enfant sur la même page

De mon application MVC classique a un parent-enfant (maître-détail) les relations.

Je veux avoir une seule page à la fois créer les nouveaux parents et les enfants sur la même page. J'ai ajouté une action renvoie une vue partielle qui et ajoute de l'enfant HTML pour la mère, mais je ne sais pas comment faire pour associer l'enfant nouvellement créé dans l'action pour le parent d'origine (en d'autres mots, comment puis-je ajouter de la nouvelle entité enfant à la collecte de ces entités dans l'entité mère).

Je suppose que quand je soumettre le formulaire de l'action doit obtenir l'entité mère et le nouvellement créé enfants dans sa collection.

Donc à faire les choses à court, ce qui devrait être le code de l'action qui crée de l'enfant de l'entité et la façon dont l'enfant est ajouté à sa collection parent?

J'ai lu beaucoup de posts ici (et sur d'autres sites) et ne pouvait pas trouver un exemple.

L'application utilise MVC 4 et Entity Framework 5.

Exemple de Code (j'ai enlevé une partie du code de la keep it simple).
Le modèle est de la Forme (parent) et FormField (enfant) les entités.

public partial class Form
{ 
    public int ID { get; set; }
    public string Name { get; set; }

    public virtual ICollection<FormField> FormFields { get; set; }
}

public partial class FormField
{
    public int ID { get; set; }
    public string Name { get; set; }
    public int FormID { get; set; }
}

Suivantes vue partielle (_CreateFormField.cshtml) crée de nouvelles FormField (enfant).

@model FormField

@using (Html.BeginForm()) {
@Html.ValidationSummary(true)

<fieldset>
    <legend>FormField</legend>

    <div class="editor-label">
        @Html.LabelFor(model => model.Name)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.Name)
        @Html.ValidationMessageFor(model => model.Name)
    </div>

    <div class="editor-label">
        @Html.LabelFor(model => model.FormID)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.FormID)
        @Html.ValidationMessageFor(model => model.FormID)
    </div>


</fieldset>
}

Et la vue suivante (Créer.cshtml) est celui qui le crée la Forme.

@model Form

@using (Html.BeginForm()) {
@Html.ValidationSummary(true)

<fieldset>
    <legend>Form</legend>

    <div class="editor-label">
        @Html.LabelFor(model => model.Name)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.Name)
        @Html.ValidationMessageFor(model => model.Name)
    </div>

<div>
        @Html.ActionLink(
                "Add Field",
                "CreateFormField", 
                new { id = -1},
                new { @class = "form-field" })
    </div>
    <p>
        <input type="submit" value="Create" />
    </p>
</fieldset>
}

<div>
    @Html.ActionLink("Back to List", "Index")
</div>

<div id="CreateFormField"></div>

@section Scripts {
<script>
    $(function () {
        $('.form-field').on('click', function (e) {

            $.get($(this).prop('href'), function (response) {
                $('#CreateFormField').append(response)
            });

            e.preventDefault();
        });
    });
</script>

@Scripts.Render("~/bundles/jqueryval")

}

Les actions suivantes se charge de la création dans la FormController.

[HttpPost]
public ActionResult Create(Form form)
{
    if (ModelState.IsValid)
    {
        db.Forms.Add(form);
        db.SaveChanges();
        return RedirectToAction("Index");
    }

    return View(form);
}

public ActionResult CreateFormField(string id = null)
{
    //I guess something is missing here.

    return PartialView("_CreateFormField", new FormField());
}

Merci d'avance,

Sharon.

source d'informationauteur Sharon Eden