Я сталкиваюсь с той же проблемой в моих приложениях MVC 3.У меня есть вид для создания нового продукта, и этот продукт может быть отнесен к одной или нескольким категориям.Вот мои классы EF Code First Model:
public class Product
{
public int ProductID { get; set; }
public string Name { get; set; }
public virtual ICollection<Category> Categories { get; set; }
}
public class Category
{
public int CategoryID { get; set; }
public string Name { get; set; }
public virtual ICollection<Product> Products { get; set; }
}
Итак, я создаю модель представления для представления создания продукта и включаю продукт и список категорий:
public class ProductEditViewModel
{
public Product Product { get; set; }
public List<SelectListItem> CategorySelections { get; set; }
public ProductEditViewModel(Product product, List<Category> categories)
{
this.Product = product;
CategorySelections = categories.Select(c => new SelectListItem()
{
Text = c.Name,
Value = c.CategoryID.ToString(),
Selected = (product != null ? product.Categories.Contains(c) : false)
}).ToList();
}
}
Итак, я отображаю представление с вводом имени и списком флажков для каждой категории (с именем «Product.Categories»).Когда моя форма отправляется обратно, я хочу сохранить продукт со связанными категориями (или, если ModelState недействителен, чтобы снова отобразить представление с выбранными категориями, которые пользователь сделал нетронутыми).
[HttpPost]
public ActionResult Create(Product product)
{
if (ModelState.IsValid)
{
db.Products.Add(product);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(new ProductEditViewModel(product, db.Categories.ToList()));
}
Когда я это сделаючто и выберите одну или несколько категорий, ModelState является недействительным и возвращает представление «Правка» со следующей ошибкой проверки:
Недопустимое значение «25, 2».// 25 и 2 являются идентификаторами категорий
Для меня имеет смысл, что он не может связать 25 и 2 с фактическими объектами категории, но есть стандартный способ использования пользовательского ModelBinder, который позволил бымне перевести идентификаторы в категории и прикрепить их к контексту?