2008-10-21 11 views
12

Kullanıcı tanımlı kategoriler için onay kutularını içeren bir ASP.NET MVC görünümüm var.ASP.NET MVC: LINQ To SQL ile çoktan çoğa DB assoc tablosuna form onay kutularını almanın en iyi yolu?

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

formu, aşağıdaki kontrol harekete nakledilir:

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

şekilde onay kutuları tamsayı kimlikleri "CategoryIds", seçilmiş bir kategorisini temsil eden her bir dizi için dönüştürülür. Daha sonra bunları iki sütun içeren bir ilişkilendirme tablosuna koymak istiyorum: PostID ve CategoryID. Bu, Gönderiler ve Kategoriler arasında çoktan çoğa ilişkisi kurmak için kullanılır.

Şu anda bunu zorluyorum: kategoriler arasında döngü oluşturma ve her biri için kategori kimliğini içeren ilişkilendirme tablosuna bir satır ekleme ve ait olduğu gönderinin kimliği.

Ancak bu otomatik olarak ASP.NET MVC ve SQL LINQ bağlamında bunu yapmak için daha temiz bir yolu olup olmadığını merak ediyorum?

Teşekkürler!

cevap

7

Yaptığınız şeyin iyi olduğunu düşünüyorum ... söyleyebildiğim tek şey, kimlikleriyle döngü yapmak istemiyorsanız, "InsertAllOnSubmit" ile de aynı anda ekleyebilirsiniz. Bu gerçekten sadece) çok döngü olsa:

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

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

Ama her iki şekilde, bu hala sadece ne var aynı yapıyor.