ASP.NET MVC: Der beste Weg, Form Kontrollkästchen in many-to-many DB Assoc Tabelle mit LINQ zu erhalten, um zu SQL?

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

Frage

Ich habe eine Ansicht ASP.NET MVC, die Kontrollkästchen für benutzerdefinierte Kategorien enthält.

<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>

Die Form der folgenden Controller-Aktion gebucht wird:

[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);
}

Die Form Kontrollkästchen wird auf ein Array von Integer-IDs „CategoryIDs“ umgewandelt werden, die jeweils eine ausgewählte Kategorie entspricht. Ich möchte diese dann in eine Zuordnungstabelle setzen, die zwei Spalten: PostID und CategoryID. Dies wird verwendet, um eine many-to-many Assoziation zwischen Beiträgen einzurichten und Kategorien.

Zur Zeit bin ich Brute-Forcing es. Durch die Kategorien Looping und für jeden, eine Zeile in die Zuordnungstabelle Hinzufügen der Kategorie-ID enthält, und die ID des Beitrags zu dem er angehört

Aber ich frage mich, ob es ein sauberere Weg, dies im Zusammenhang mit ASP.NET MVC und LINQ automagically zu tun, um SQL?

Danke!

War es hilfreich?

Lösung

Ich denke, was Sie tun, ist in Ordnung ... das einzige, was ich sagen kann, ist, dass, wenn Sie nicht wollen, durch die IDs in einer Schleife, können Sie sie zur gleichen Zeit mit „InsertAllOnSubmit“ hinzufügen könnte (obwohl das ist wirklich nur Looping auch):

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

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

Aber so oder so, das ist immer noch nur das gleiche zu tun wie das, was Sie haben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top