2009-04-22 5 views
0

J'ai une structure simpleASP.NET MVC, SImple page Créer à travers entité LINQ2SQL parent-enfant

Widget (table parent)

  • id (identité)

  • titre

Widg etChild (table d'enfant) -

  • id (clé étrangère à widget.id)
  • contenu

Sur mon avis j'ai un champ qui capture le titre, et un autre champ qui capture la valeur du contenu.

<%= Html.TextBox("title") %> 

et

<%= Html.TextBox("content") %> 

Comment puis-je faire pour câblage mon contrôleur pour insérer une nouvelle entrée dans Widget premier puis insérez une entrée en WidgetChild? Est-ce que je passe une instance de FormCollection, instancie manuellement l'instance de Widget et transmets les valeurs? Ou puis-je utiliser UpdateModel() en quelque sorte? Je ne suis pas familier avec la façon dont UpdateModel peut lier mes valeurs de formulaire en particulier si elles couvrent plusieurs tables/classes.

Répondre

1

Vous pouvez utiliser la reliure de modèle automatique ici.

Avec une forme comme ceci:

<%using(Html.BeginForm("Update", "Home")) {%> 
    <%=Html.TextBox("widget.Title") %> 
    <%=Html.TextBox("childWidget.Content") %> 
    <input type="submit" value="Submit" /> 
    <%} %> 

Votre contrôleur peut alors ressembler à ceci:

public ActionResult Update(Widget widget, WidgetChild childWidget) 
{ 
    // do whatever with the objects here 
} 

Les objets auront les propriétés de la forme peuplée là (titre pour widget et contenu pour childWidget) - vous pouvez alors associer ces objets entre eux et les enregistrer dans votre contexte de données linq to sql de la manière habituelle.

0

Vous devez différencier deux processus selon la structure de votre base de données. vous pouvez utiliser une étape de l'assistant. vérifiez ceci link.

La deuxième façon est de le faire manuellement. Comme sur la page submit, vous obtiendrez toutes les données de la page dans la méthode d'action qui accepte le verbe post, à droite. Maintenant, vous pouvez faire une entrée dans la table parent en remplissant les champs obligatoires, puis récupérer immédiatement le même enregistrement pour obtenir la clé primaire. Et enfin, vous pouvez entrer des données dans la table enfant en utilisant l'ID de la table parent.

Ne pensez-vous pas que ce processus est un mal de tête! Il est préférable d'ajouter du contenu enfant dans une autre vue dans laquelle vous pouvez afficher une liste déroulante pour le widget du widget, puis ajouter du contenu.

Questions connexes