ASP.NET MVC: Melhor maneira de obter formulários caixas de seleção em muitos-para-muitos tabela assoc DB com LINQ to SQL?

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

Pergunta

Eu tenho uma visão ASP.NET MVC que contém caixas de seleção de categorias definidas pelo usuário.

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

O formulário é lançado para o seguinte ação do 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);
}

As caixas de formulário será convertido para uma matriz de IDs inteiros "CategoryIDs", cada um representando uma categoria seleccionada. Eu, então, quer pô-los em uma tabela de associação que contém duas colunas: PostID e CategoryID. Isto é usado para configurar uma associação muitos-para-muitos entre Mensagens e categorias.

Atualmente estou-força bruta que:. Loop através das categorias e para cada um, adicionando uma linha à tabela de associação que contém o ID da categoria, eo ID do cargo ao qual ele pertence

Mas eu estou querendo saber se há uma maneira mais limpa de fazer isso automagicamente no contexto do ASP.NET MVC e LINQ to SQL?

Obrigado!

Foi útil?

Solução

Eu acho que você está fazendo é bom ... a única coisa que eu diria é que, se você não quiser percorrer o ID do, você pode adicioná-los ao mesmo tempo com "InsertAllOnSubmit" (embora isto é realmente apenas looping também):

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

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

Mas de qualquer forma, que ainda só está fazendo o mesmo que o que você tem.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top