Je travaille avec ASP.NET MVC 4 et Cadre d'entité. Dans ma base de données, j'ai une table Abonnement Strong> qui représente un abonnement aux transports en commun. Cet abonnement peut donner accès à plusieurs sociétés de transports publics forts> (un abonnement pourrait avoir 1, 2, 3, ... entreprises) alors il s'agit d'une relation nombreuses à plusieurs entre ces tables (j'ai une table intermédiaire entre eux). P>
Je veux permettre la création d'un abonnement à une page qui contiendra un champ montant em> de l'abonnement et des sociétés disponibles par cases à cocher. Chaque case constitue une société existante (société stockée dans ma base de données). P>
Une idée de la façon de faire ça? J'ai lu cette cases à cocher multiples ASP.NET MVC mais ce n'était pas vraiment utile. p>
Edit: Voici mon diagramme de tables. P>
p>
3 Réponses :
Vous commencez avec deux modèles de vue. Le premier qui représente une entreprise sélectionnée ... ... et le second pour l'abonnement à créer: p> Ensuite, dans le SubscriptionController Code> S Obtenez une action Vous chargez les sociétés de la base de données pour initialiser le modèle de vue: P>
[HttpPost]
public ActionResult Create(SubscriptionCreateViewModel viewModel)
{
if (ModelState.IsValid)
{
var subscription = new Subscription
{
Amount = viewModel.Amount,
SubscriptionByCompanies = new List<SubscriptionByCompany>()
};
foreach (var selectedCompany
in viewModel.Companies.Where(c => c.IsSelected))
{
var company = new Company { CompanyId = selectedCompany.CompanyId };
_context.Companies.Attach(company);
var subscriptionByCompany = new SubscriptionByCompany
{
Company = company
};
subscription.SubscriptionByCompanies.Add(subscriptionByCompany);
}
_context.Subscriptions.Add(subscription);
_context.SaveChanges();
return RedirectToAction("Index");
}
return View(viewModel);
}
Merci beaucoup, je pense que ça va aider! Je vais essayer maintenant et vous le faire savoir. Cependant, une petite question: le rendu de la vue partielle sera effectué automatiquement avec votre échantillon? Merci encore
@Traffy: Oui, Editeur pour (Modèle => Model.canies) Code> Détecte que les sociétés code> sont une collection et rend une vue partielle par article. Nom du fichier de modèle (doit correspondre au nom du modèle) et les chemins doivent être exacts car MVC recherche la vue partielle avec certaines conventions (les habituelles dans
Vues / {contrôlez} code> et dans
partagés code> etc., mais dans un sous-dossier appelé
EditTorTorplates code>).
D'accord merci. Là encore, une question: dans la méthode postale, vous créez un nouveau abonnement et peupler le montant et les entreprises. Cependant, il n'y a pas de liste de sociétés ni d'attributs dans ma table. Est-ce qu'il importe si je l'enlève?
Ok, je vois ce que tu veux faire. Laissez-moi 2 secondes pour vous montrer mon modèle de tables.
C'est ici. Pouvez-vous regarder dessus?
Merci. Semble être bon mais une seule chose ne fonctionne pas correctement: quand je vais PublictransportsubsgricBynCompany = nouvelle liste
@Traffy: Oh chérie, utilisez-vous cette affaire EF hors datée avec entityObject code> et aucun pocos? Vous pouvez essayer de commenter cette ligne. Je crois que
entityObject code> initialise automatiquement ses collections de navigation.
Merci ! Ça marche, merci! Une dernière question: comment devrais-je procéder pour une modification s'il vous plaît? Merci encore !
@Traffy: C'est un peu plus de travail. Vous auriez des modèles de vue similaires (mais incluant l'ID dans AbonnementDitViewModel CODE>), chargez l'abonnement, y compris les ID des sociétés déjà liées, chargez à nouveau toutes les sociétés i> Settent
Isselected code> à
vrai code> pour les entreprises déjà liées à l'abonnement. La post-action est plus difficile car vous devez maintenant supprimer des entités de la table de liens lorsque l'utilisateur dispose d'une entreprise et ajoutez des entités à la table de liens lorsque l'utilisateur a vérifié une nouvelle société. Il suffit de commencer et d'ouvrir de nouvelles questions quand vous serez coincé :)
Merci pour la grande réponse! Mais comme trappant, j'aimerais vraiment voir comment cela s'étend pour éditer et supprimer des fonctionnalités également. Pourriez-vous s'il vous plaît montrer comment vous remplaceriez votre classificationElectViewModel dans votre méthode de contrôleur d'édition pour obtenir les valeurs "cochées" et "non cochées"? C'est la dernière partie du puzzle que je me débats.
@Mattflowers: Quelqu'un a posé la même question dans une nouvelle question. La réponse est ici: Stackoverflow.com/a/17819169/270591
Je préfère cette réponse: Enregistrement de nombreuses données sur de nombreuses relations sur MVC Create View Si vous faites d'abord la base de données, passez simplement à la partie de la section 1. P>
Juste une extension de la réponse de Slauma. Dans mon cas, je devais représenter plusieurs à plusieurs comme une table entre produits et rôles, première colonne représentant des produits, l'en-tête représentant des rôles et la table à remplir avec des cases à cocher pour sélectionner des rôles pour le produit.
Pour atteindre cet objectif, j'ai utilisé la fenêtre comme Slauma décrit, mais a ajouté un autre modèle contenant les deux derniers, comme: suivant, dans le contrôleur, nous devons remplir les données: P> @model Insurance.Admin.Models.RoleViewModel
@Html.HiddenFor(model => model.Id)
<td>
@Html.EditorFor(model => model.IsSelected)
</td>
Les entreprises sont-elles un jeu de données "fixe" (ce qui signifie qu'ils ne seront pas modifiés dans cette vue?)
Exactement. Mes entreprises sont stockées dans ma table «Sociétés» et ne seront pas modifiées ici, dans la vue Créer / Modifier.
Vous pouvez avoir une liste déroulante comme ceci: lien
Non, je ne cherche pas une liste déroulante car comme je l'ai dit, un abonnement pourrait être composé de 2 entreprises ou plus. C'est pourquoi c'est pourquoi je pense que les cases à cocher sont meilleures.
Je ne sais pas quel moteur de vue vous utilisez, mais ce n'est pas si difficile, il vous suffit de faire itérer les entreprises et de créer les boutons. Vous devrez peut-être changer la classe de modèle.
J'utilise le moteur de rasoir. Créer les entreprises n'est pas si difficile oui, mais que diriez-vous de l'action "Créer", par exemple? Comment puis-je vérifier les cases à cocher vérifiées et qui ne sont pas?
Essayer de faire avec ViewModel, mais je ne vois pas comment puis-je l'obtenir.