ASP.NET MVC: ¿La mejor manera de convertir las casillas de verificación de formularios en una tabla de base de datos de muchos a muchos con LINQ to SQL?

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

Pregunta

Tengo una vista MVC de ASP.NET 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 de formulario se convertirán en una matriz de ID de enteros " ID de categoría " ;, cada uno representando una categoría seleccionada. Luego quiero poner esto en una tabla de asociación que contiene dos columnas: PostID y CategoryID. Esto se utiliza para configurar una asociación de muchos a muchos entre publicaciones y categorías.

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

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

¡Gracias!

¿Fue útil?

Solución

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

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

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

Pero de cualquier manera, eso sigue siendo lo mismo que tienes.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top