Mam coś podobnego, produkt należy do wielu kategorii i kategorii, ma wiele produktów.
W moim widoku administracyjnym do tworzenia nowych produktów, jestem w stanie pozwolić użytkownikowi wybrać wiele "znaczników" kategorii, na których ten produkt powinien być wymieniony.
Z powodu tak wielu kategorii staram się unikać list wielokrotnego wyboru i używać pewnego rodzaju auto sugestii z ajaxem do pobierania kategorii i zapełniania ich za pomocą wtyczki jQuery, takiej jak TagIt.
Ale dla uproszczenia można wykorzystać to w swoim kontrolerze
public class HomeController : Controller
{
public ActionResult Create()
{
var tags = new List<Tag>()
{
new Tag() { TagId = 1, Name = "Planes", Posts = new Collection<Post>() },
new Tag() { TagId = 2, Name = "Cars", Posts = new Collection<Post>() },
new Tag() { TagId = 2, Name = "Boats", Posts = new Collection<Post>() }
};
ViewBag.MultiSelectTags = new MultiSelectList(tags, "TagId", "Name");
return View();
}
[HttpPost]
public ActionResult Create(Post post, int[] tags) // Tags is not case-sensative from model binder when html element name="tags" <-- array passed back to controller
{
// Find Tag from Database
// Attach tag entity to Post
// foreach(var tagId in tags)
// var tag = context.Tags.find(tagId)
// post.Tags.Add(tag);
// context.SaveChanges();
return RedirectToAction("Create");
}
}
A wewnątrz Widok/Create.cshtml
@model MvcApplication1.Models.Post
<h2>Create</h2>
@using (Html.BeginForm("Create", "Home", FormMethod.Post))
{
<label>Name</label>
@Html.TextBoxFor(model => model.Name)
<label>Tags For Post</label>
@Html.ListBox("Tags", (MultiSelectList)ViewBag.MultiSelectTags)
<input type="submit" value="Submit Post"/>
}
wszystkie Wybrane tagi:
Następnie po wybraniu wielu przy wysyłaniu z powrotem do kontrolera możesz se e w debugowania, że spoiwo modelu wie wysłać tablicę z powrotem z html nazwy elementu „tagi”
Jaki byłby najlepszy sposób zaktualizować znaczniki podczas edycji? Ass niektóre mogą być dodawane lub usuwane – MrBeanzy
Mieć stronę edycji wstępnie wypełnić kilka pól wyboru i przekazać je w ten sam sposób poprzez 'tagi [int] [] lub pole mutli-select. Działa to tak samo z tworzeniem, aktualizowaniem lub usuwaniem. –