将一个项目保留在应禁用的列表中

时间:2015-12-22 10:15:38

标签: c# asp.net-mvc where

我有一个包含公司列表的页面。每个公司都是一个集团,如:

enter image description here

但是这里有一个问题,可以禁用组,如果它们是,则不会更改列表的显示,但它会对我的编辑页面产生影响。

enter image description here

如您所见,我的群组中有一个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中。

这是出于逻辑的原因,如果没有公司在其列表中放置公司就没有意义。

我如何更改上面显示的代码,以便让公司在我的列表中关闭公司?

2 个答案:

答案 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。这实际上使得查询不那么优化,因为没有它,实体框架可以只选择它需要的列(GroupIdName)。