SelectlistItem selected = true问题

时间:2009-08-17 12:33:29

标签: c# asp.net-mvc

我在选择列表中获取所选项目时遇到问题。

Product product = _pr.GetProducts().ByProductID(productID).First();
        product.Categories.Load();
        ICollection<Category> allCategories = _cr.GetCategories().ToList();

        List<SelectListItem> Categories = (from category in allCategories
                                           select
                                           new SelectListItem
                                           {
                                               Selected = product.Categories.Contains(category),
                                               Value = category.CategoryID.ToString(),
                                               Text = category.Categoryname
                                           }).ToList();

类别返回4项,并且所有选择都是假的.......如果我悬停“product.Categories”那里有3个项目,这是正确的....但不知何故它没有设置为true 。

可能有什么问题? / M

2 个答案:

答案 0 :(得分:1)

您正在使用的Contains()的重载将使用默认对象比较,除非您覆盖Equals()GetHashCode(),否则它只会匹配完全相同的实例。一种选择是创建自定义CategoryEqualityComparer并将其传递给this overload of Contains()。或者,您可以加入ID上的类别:

Product product = _pr.GetProducts().ByProductID(productID).First();
product.Categories.Load();
ICollection<Category> allCategories = _cr.GetCategories().ToList();

List<SelectListItem> Categories = (
    from category in allCategories
    join pc in product.Categories
      on category.CategoryID equals pc.CategoryID into j
    select
    new SelectListItem
    {
        Selected = j.Any(),
        Value = category.CategoryID.ToString(),
        Text = category.Categoryname
    }).ToList();

答案 1 :(得分:0)

我看到您将'allCategories'设置为_cr.GetCategories集合 - 您确定该产品包含该集合中的类别吗?您的“类别”字段看起来不包含任何产品类别。你能发布每个集合中的内容吗?