我在获取选择列表中的所选项目时遇到问题。
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 个项目,并且 selected 全部为假......如果我将鼠标悬停在“product.Categories”上,那里有 3 个项目,这是正确的......但不知何故它没有设置为 true .
可能出了什么问题? /M
最佳答案
您正在使用的 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();
关于c# - SelectlistItem selected = true 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1287709/