ASP.NET MVC:Лучший способ установить флажки формы в таблицу "многие ко многим" DB assoc с помощью LINQ To SQL?

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

Вопрос

У меня есть 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);
}

Флажки формы будут преобразованы в массив целочисленных идентификаторов "CategoryIDs", каждый из которых представляет выбранную категорию.Затем я хочу поместить их в ассоциативную таблицу, содержащую два столбца:Почтовый идентификатор и идентификатор категории.Это используется для настройки связи "многие ко многим" между Публикациями и Категориями.

В настоящее время я грубо форсирую это:перебираем категории и для каждой из них добавляем строку в ассоциативную таблицу, содержащую идентификатор категории и идентификатор записи, к которой она относится.

Но мне интересно, есть ли более чистый способ сделать это автоматически в контексте ASP.NET MVC и LINQ to SQL?

Спасибо!

Это было полезно?

Решение

Я думаю, то, что ты делаешь, прекрасно...единственное, что я бы сказал, это то, что если вы не хотите перебирать идентификаторы, вы могли бы добавить их одновременно с помощью "InsertAllOnSubmit" (хотя на самом деле это тоже просто цикл):

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

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

Но в любом случае, это все равно делает то же самое, что и у вас.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top