Я использую Entity Framework, и у меня есть много-много отношений между Продуктами и Категориими. Я создал свои модели, и они, похоже, правильно создали таблицы. Теперь я пытаюсь вставить продукт, и я получаю ошибку: «Значение не может быть нулевым». на линии: @Html.ListBoxFor(model => model.ProductCategories, Model.CategorySelectList.Select(c => new SelectListItem { Text = c.Text, Value = c.Value }), new { @class = "chzn-select", data_placeholder = "Choose categorie(s)..."})
html listboxfor value не может быть null
Вот мой ProductModel:
public class ProductModel
{
public int ID { get; set; }
[Required(ErrorMessage = "Required")]
[Index("ItemNumber", 1, IsUnique = true)]
[Display(Name = "Item #")]
public int itemNumber { get; set; }
[Required(ErrorMessage = "Required")]
[Display(Name = "Product")]
[MaxLength(50)]
public String product { get; set; }
[Display(Name = "Description")]
[MaxLength(500)]
public String description { get; set; }
[DefaultValue(true)]
[Display(Name = "Active?")]
public bool active { get; set; }
[Display(Name = "Image Name")]
public String imageName { get; set; }
[Display(Name = "PDF Name")]
public String PDFName { get; set; }
[Display(Name = "Category(s)")]
public virtual ICollection<CategoryModel> ProductCategories { get; set; }
public IEnumerable<SelectListItem> CategorySelectList { get; set; }
//public ICollection<CategoryModel> CategoryList { get; set; }
public virtual BrochureModel Brochure { get; set; }
public IEnumerable<SelectListItem> BrochureList { get; set; }
public static IEnumerable<SelectListItem> getCategories(int id = 0)
{
using (var db = new ProductContext())
{
List<SelectListItem> list = new List<SelectListItem>();
var categories = db.Categories.ToList();
foreach (var cat in categories)
{
SelectListItem sli = new SelectListItem { Value = cat.ID.ToString(), Text = cat.categoryName };
if (id > 0 && cat.ID == id)
{
sli.Selected = true;
}
list.Add(sli);
}
return list;
}
}
public ProductModel()
{
active = true;
}
}
Вот метод в контроллере, который заполняет списки:
public ActionResult ControlPanel()
{
ViewBag.Message = TempData["Message"] == null ? "" : TempData["Message"].ToString();
//using (var db = new ProductContext())
//{
// var categories = from c in db.Categories
// select c;
// categories = categories.OrderByDescending(c => c.isActive);
// var model = new AdminModel
// {
// Categories = categories.ToList(),
// Products = db.Products.ToList(),
// RegisterUsers = db.RegisterViewModels.ToList()
// };
// return View(model);
//}
var model = new AdminModel();
using (var db = new ProductContext())
{
var categories = from c in db.Categories
select c;
categories = categories.OrderByDescending(c => c.isActive);
model.Categories = categories.ToList();
model.Products = db.Products.ToList();
model.Brochures = db.Brochures.ToList();
};
я, вероятно, что-то неправильно в ListBoxFor линии и может быть, что-то не так в моей модели, но я не уверен.
как ваш контроллер заполняется? – code