ASP.NET MVC: Le meilleur moyen d’obtenir des cases à cocher de formulaire dans une table assoc de base de données plusieurs à plusieurs avec LINQ To SQL?

StackOverflow https://stackoverflow.com/questions/223363

Question

J'ai une vue ASP.NET MVC qui contient des cases à cocher pour les catégories définies par l'utilisateur.

<td><% foreach (Category c in (List<Category>)ViewData["cats"]) {
       if (selCats.ContainsKey(c.ID)) { %>
       <input name="CategoryIDs" type="checkbox" value="<%=c.ID %>" checked="checked" />&nbsp;<%= c.Name%><% } 
        else { %>
       <input name="CategoryIDs" type="checkbox" value="<%=c.ID %>" />&nbsp;<%= c.Name%> <% } %>
     <% } %>
</td>

Le formulaire est envoyé à l'action suivante du contrôleur:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(int id, int [] CategoryIDs)
{
    PostsDataContext db = new PostsDataContext();
    var post = db.Posts.Single(p => p.ID == id);
    UpdateModel(post, new[] { "Title", "Subtitle", "RawContent", "PublishDate", "Slug" });
    db.SubmitChanges();
    return Redirect("/archives/" + post.Slug);
}

Les cases à cocher du formulaire seront converties en un tableau d’identificateurs d’entiers "CategoryIDs", chacun représentant une catégorie sélectionnée. Je veux ensuite les mettre dans une table d'association contenant deux colonnes: PostID et CategoryID. Ceci est utilisé pour configurer une association plusieurs-plusieurs entre les articles et les catégories.

Actuellement, je le force brusquement: parcourant les catégories et, pour chacune d’elles, ajoutant une ligne à la table d’association contenant l’ID de la catégorie et l’ID de la publication à laquelle elle appartient.

Mais je me demande s’il existe une méthode plus propre pour le faire automatiquement dans le contexte d’ASP.NET MVC et de LINQ to SQL?

Merci!

Était-ce utile?

La solution

Je pense que ce que vous faites est bien ... la seule chose que je dirais, c'est que si vous ne voulez pas lire les ID en boucle, vous pouvez les ajouter en même temps avec "InsertAllOnSubmit". (même s'il ne s'agit que d'une boucle):

int[] categoryIDs = new int[] { 0, 1, 2 };

dataContext.PostCategories.InsertAllOnSubmit(
categoryIDs.Select(id =>
    new PostCategory
    {
        CategoryID = id,
        PostID = myPostID
    })
);

Mais dans tous les cas, cela ne fait que faire la même chose que ce que vous avez.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top