【问题标题】:IEnumerable <SelectListItem> - Condition for each item in IEnumerableIEnumerable <SelectListItem> - IEnumerable 中每个项目的条件
【发布时间】:2016-06-25 21:20:04
【问题描述】:

我正在使用 MVC Razor 的 @Html.DropDownList 来生成下拉列表。

        IEnumerable<SelectListItem> cSfRR = db.TABLE.Where(m => m.cRoleName == dbrole)
        .Select(c => new SelectListItem
         {
             Value = c.ID,
             Text = c.Name 
         });
        ViewBag.cSfRR = cSfRR;

此表还有一个字段,用于确定表中每个项目的活动。

如果我使用以下代码,我会在 c.Name 之后包含该活动字段

        IEnumerable<SelectListItem> cSfRR = db.TABLE.Where(m => m.cRoleName == dbrole)
        .Select(c => new SelectListItem
         {
             Value = c.ID,
             Text = c.Name + " - " + c.Activity 
         });
        ViewBag.cSfRR = cSfRR;

我的问题是该字段只有一个字符来确定它的活动。 A - 活动,N - 不活动。 我想为 SelectListItem 中值为“N”的那些项目显示自定义文本“未激活”。有点像...

        IEnumerable<SelectListItem> cSfRR = db.TABLE.Where(m => m.cRoleName == dbrole)
        .Select(c => new SelectListItem
         {
             Value = c.ID,
             Text = c.Name + " - " + IF C.ACTIVITY IS "N", THEN PRINT "NOT ACTIVE" 
         });
        ViewBag.cSfRR = cSfRR;

我希望有人可以帮助我实现这样的目标

下拉列表项目 1

下拉列表项目 2

下拉列表项目 3

下拉列表项目 4

下拉列表第 5 项 - 未激活

下拉列表第 6 项 - 未激活

下拉列表第 7 项 - 未激活

【问题讨论】:

    标签: asp.net-mvc razor ienumerable selectlistitem


    【解决方案1】:

    我不提倡使用ViewBag,但这应该可以:

    IEnumerable<SelectListItem> cSfRR = db.TABLE.Where(m => m.cRoleName == dbrole)
        .Select(c => new SelectListItem
         {
             Value = c.ID,
             Text = c.Name + (c.ACTIVITY == "N" ? " - NOT ACTIVE" : string.empty)
         });
        ViewBag.cSfRR = cSfRR;
    

    【讨论】:

      【解决方案2】:

      你可以使用conditional operator - ?: Operator

      IEnumerable<SelectListItem> cSfRR = db.TABLE.Where(m => m.cRoleName == dbrole)
      .Select(c => new SelectListItem
      {
          Value = c.ID,
          Text = c.Name + (c.Activity == "N" ? " - NOT ACTIVE" : "")
      });
      ViewBag.cSfRR = cSfRR;
      

      【讨论】:

      • 你的条件倒退了。 (c.Activity == "N" ? " - NOT ACTIVE" : "")
      • 如果 Win 的回答修复或帮助解决了您的问题,您应该将其标记为已接受。这样一来,这将不会继续出现在未回答的问题列表中(并且 Win 得到了他应得的回答)。
      【解决方案3】:

      你可以试试这样的:

      IEnumerable<SelectListItem> cSfRR = db.TABLE.Where(m => m.cRoleName == dbrole)
                  .Select(c => new SelectListItem
                   {
                       Value = c.ID,
                       Text = c.Name + (c.Activity == "N") ? " - Not Active " : "";
                   });
                  ViewBag.cSfRR = cSfRR;
      

      【讨论】:

      • IEnumerable cSfRR = db.TABLE.Where(m => m.cRoleName == dbrole) .Select(c => new SelectListItem { Value = c.ID, Text = c.Name + (c.Activity == "N" ? " - 不活跃 " : ""); }); ViewBag.cSfRR = cSfRR; - 只有括号应该在最后关闭
      猜你喜欢
      • 2015-01-29
      • 1970-01-01
      • 2015-11-07
      • 1970-01-01
      • 2017-07-15
      • 1970-01-01
      • 2019-05-16
      • 1970-01-01
      • 2020-09-12
      相关资源
      最近更新 更多