当前位置:  开发笔记 > 编程语言 > 正文

ASP.NET MVC:使用LINQ To SQL将表单复选框转换为多对多DB关联表的最佳方法?

如何解决《ASP.NETMVC:使用LINQToSQL将表单复选框转换为多对多DB关联表的最佳方法?》经验,为你挑选了1个好方法。

我有一个ASP.NET MVC视图,其中包含用户定义类别的复选框.

<% foreach (Category c in (List)ViewData["cats"]) {
       if (selCats.ContainsKey(c.ID)) { %>
        <%= c.Name%><% } 
        else { %>
        <%= c.Name%> <% } %>
     <% } %>

表单将发布到以下控制器操作:

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

表单复选框将转换为整数ID"CategoryID"的数组,每个ID表示一个选定的类别.然后我想把它们放到一个包含两列的关联表中:PostID和CategoryID.这用于在帖子和类别之间建立多对多关联.

目前我正在强制它:循环遍历类别,并为每个类别添加一行到包含类别ID的关联表,以及它所属的帖子的ID.

但我想知道在ASP.NET MVC和LINQ to SQL的上下文中是否有一种更自然的方法可以自动执行此操作?

谢谢!



1> Timothy Khou..:

我认为你正在做的事情很好......我唯一要说的是,如果你不想循环使用ID,你可以使用"InsertAllOnSubmit"同时添加它们(即使这确实是只是循环):

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

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

但无论哪种方式,这仍然只是与你拥有的一样.

推荐阅读
jerry613
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有