【问题标题】:ASP.NET MVC: Best way to get form checkboxes into many-to-many DB assoc table with LINQ To SQL?ASP.NET MVC:使用 LINQ To SQL 将表单复选框放入多对多 DB 关联表的最佳方法?
【发布时间】:2008-10-21 20:25:26
【问题描述】:

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

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

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

[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 数组“CategoryIDs”,每个代表一个选定的类别。然后,我想将它们放入包含两列的关联表中:PostID 和 CategoryID。这用于在帖子和类别之间建立多对多关联。

目前我正在强制使用它:遍历类别,并为每个类别在关联表中添加一行,其中包含类别 ID 和所属帖子的 ID。

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

谢谢!

【问题讨论】:

    标签: .net asp.net-mvc linq-to-sql forms


    【解决方案1】:

    我认为你所做的很好......我唯一想说的是,如果你不想循环访问 ID,你可以同时使用“InsertAllOnSubmit”添加它们(即使这实际上也只是循环):

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

    但无论哪种方式,这仍然和你所拥有的一样。

    【讨论】:

      猜你喜欢
      • 2013-09-24
      • 2011-01-09
      • 1970-01-01
      • 1970-01-01
      • 2011-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-07
      相关资源
      最近更新 更多