我有一个包含公司列表的页面。每个公司都是一个集团,如:
但是这里有一个问题,可以禁用组,如果它们是,则不会更改列表的显示,但它会对我的编辑页面产生影响。
如您所见,我的群组中有一个DropDownList
。但是,如果某个群组已禁用,则它不会显示在列表中,因为我会检索所述列表:
public IEnumerable<SelectListItem> ListGroupEnabled()
{
List<SelectListItem> X = _entities.Groups.Where(p => p.IsEnabled).ToList().Select(c => new SelectListItem { Value = c.GroupId.ToString(), Text = c.Name }).ToList();
return X;
}
但这就是我希望实现的目标:
如果我要编辑一个已禁用组的公司,我仍然希望该组(以及仅该组)出现在已启用组中的DDList中。
这是出于逻辑的原因,如果没有公司在其列表中放置公司就没有意义。
我如何更改上面显示的代码,以便让公司在我的列表中关闭公司?
答案 0 :(得分:0)
Hello SelectListItem具有诸如Disabled之类的属性,您可以在发送之前设置它。 referrence
在下方修复您的代码。
public IEnumerable<SelectListItem> ListGroupEnabled()
{
List<SelectListItem> X = _entities.Groups.Select(c => new SelectListItem { Value = c.GroupId.ToString(), Text = c.Name , Disabled = c.IsEnabled }).ToList();
return X;
}
答案 1 :(得分:0)
您需要传入当前的组ID并将其包含在where子句中:
public IEnumerable<SelectListItem> ListGroupEnabled(int? currentGroupId = null)
{
return _entities.Groups.Where(
p =>
p.IsEnabled ||
(currentGroupId.HasValue && p.GroupId == currentGroupId.Value)
).Select(c => new SelectListItem { Value = c.GroupId.ToString(), Text = c.Name }).ToList();
}
在选择之前,您也无需致电ToList
。这实际上使得查询不那么优化,因为没有它,实体框架可以只选择它需要的列(GroupId
和Name
)。