【问题标题】:Keeping one item in a list that should be disabled在列表中保留一项应禁用的项目
【发布时间】:2015-12-22 10:15:38
【问题描述】:

我有一个包含公司列表的页面。每家公司都隶属于一个集团,例如:

但要注意的是,可以禁用组,如果禁用的话,这不会改变列表的显示,但它确实会影响我的版本页面。

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

这是出于逻辑考虑,简单地将公司所属的组不包含在其列表中是没有意义的。

我如何更改上面显示的代码,以便将公司所属的组保留在我的列表中?

【问题讨论】:

    标签: c# asp.net-mvc where


    【解决方案1】:

    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;
        }
    

    【讨论】:

      【解决方案2】:

      您需要传入当前组 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。这实际上使查询的优化程度降低,因为没有它,Entity Framework 只能选择它需要的列(GroupIdName)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-06-14
        • 2010-10-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-22
        相关资源
        最近更新 更多