update net mvc framework asp .net asp.net-mvc linq-to-sql html-form

framework - ASP.NET MVC: ¿la mejor manera de obtener las casillas de verificación de formularios en una tabla asso DB de muchos a muchos con SQL a SQL?



update linq c# mvc (1)

Tengo una vista ASP.NET MVC que contiene casillas de verificación para categorías definidas por el usuario.

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

El formulario se publica en la siguiente acción del controlador:

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

Las casillas de verificación del formulario se convertirán en una matriz de ID enteros "ID de categoría", cada uno representando una categoría seleccionada. Luego quiero poner estos en una tabla de asociación que contiene dos columnas: ID de publicación y ID de categoría. Esto se usa para configurar una asociación de muchos a muchos entre Publicaciones y Categorías.

Actualmente lo estoy forzando brutalmente: recorriendo las categorías, y para cada una, agregando una fila a la tabla de asociación que contiene la ID de categoría, y la ID de la publicación a la que pertenece.

Pero me pregunto si hay una forma más clara de hacerlo de forma automática en el contexto de ASP.NET MVC y LINQ a SQL.

¡Gracias!


Creo que lo que estás haciendo está bien ... lo único que diría es que si no quieres recorrer las ID, puedes agregarlas al mismo tiempo con "InsertAllOnSubmit" (aunque esto es realmente solo bucle también):

int[] categoryIDs = new int[] { 0, 1, 2 }; dataContext.PostCategories.InsertAllOnSubmit( categoryIDs.Select(id => new PostCategory { CategoryID = id, PostID = myPostID }) );

Pero de cualquier forma, eso sigue haciendo lo mismo que tú.